2013-07-04 56 views
1

我正在开发一个HTTP服务器/客户端,我目前可以通过它发送小文件,例如.txt文件和其他不需要的易读文件很多记忆。但是,当我想发送更大的文件说一个.exe或大.pdf我收到内存错误。这是因为在我尝试发送或接收文件之前,我必须指定byte []缓冲区的大小。有从流中读取缓冲区大小的方法吗?如何通过HTTP发送和接收大文件C#

我想要做这样的事情:

//Create the stream. 
private Stream dataStream = response.GetResponseStream(); 

//read bytes from stream into buffer. 
byte[] byteArray = new byte[Convert.ToInt32(dataStream.Length)]; 
dataStream.read(byteArray,0,byteArray.Length); 

但是打电话时“dataStream.Length”它抛出的错误:

ExceptionError: This stream does not support seek operations. 

有人能提供一些建议,我怎么能得到来自流的byte []长度?

谢谢,

回答

1

网络层无法知道响应流多长时间。

但是,服务器应该告诉你它有多长;请查看Content-Length响应标题。
如果该标题丢失或不正确,那么您运气不好;你需要继续阅读,直到你用完数据。

2

您可以使用CopyTo方法

MemoryStream m = new MemoryStream(); 
dataStream.CopyTo(m); 
byte[] byteArray = m.ToArray(); 

您也可以直接写入文件

var fs = File.Create("...."); 
dataStream.CopyTo(fs);