У меня есть основной поток, который является потоком HTTP-запроса, и
var s=new HttpListener().GetContext().Request.InputStream;
Я хочу прочитать поток (который содержит не-символьное содержимое, потому что я отправил пакет)
Когда мы обертываем этот поток StreamReader, мы используем функцию ReadToEnd () StreamReader, он может прочитать весь поток и вернуть строку ...
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://127.0.0.1/");
listener.Start();
var context = listener.GetContext();
var sr = new StreamReader(context.Request.InputStream);
string x=sr.ReadToEnd(); //This Workds
, но так как он имеет контент, отличный от символов, мы не можемиспользовать StremReader (я перепробовал все механизмы кодирования .. используя строку просто неправильно). И я не могу использовать функцию
context.Request.InputStream.Read(buffer,position,Len)
, потому что я не могу получить длину потока, InputStream.Length всегда выдает исключение ине может быть использовано ... и я не хочу создавать небольшой протокол, такой как [размер] [файл] и читать сначала размер, а затем файл ... каким-то образом StreamReader может получить длину ... и я просто хочу знать, как.Я также попробовал это, и это не сработало
List<byte> bb = new List<byte>();
var ss = context.Request.InputStream;
byte b = (byte)ss.ReadByte();
while (b >= 0)
{
bb.Add(b);
b = (byte)ss.ReadByte();
}
Я решил это следующим образом
FileStream fs = new FileStream("C:\\cygwin\\home\\Dff.rar", FileMode.Create);
byte[] file = new byte[1024 * 1024];
int finishedBytes = ss.Read(file, 0, file.Length);
while (finishedBytes > 0)
{
fs.Write(file, 0, finishedBytes);
finishedBytes = ss.Read(file, 0, file.Length);
}
fs.Close();
спасибо Джон, Дуглас