2013-07-04 93 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);