Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中通过HTTP发送和接收大型文件#_C#_Http_Getresponse - Fatal编程技术网

C# 如何在C中通过HTTP发送和接收大型文件#

C# 如何在C中通过HTTP发送和接收大型文件#,c#,http,getresponse,C#,Http,Getresponse,我正在开发一个HTTP服务器/客户端,目前我可以通过它发送小文件,如.txt文件和其他不需要太多内存的易于读取的文件。但是,当我想发送一个较大的文件时,比如.exe或大型.pdf文件,我会收到内存错误。这是因为在尝试发送或接收文件之前,我必须指定byte[]缓冲区的大小。在从流中读取缓冲区时,是否有方法获取缓冲区的大小 我想这样做: //Create the stream. private Stream dataStream = response.GetResponseStream(); //

我正在开发一个HTTP服务器/客户端,目前我可以通过它发送小文件,如.txt文件和其他不需要太多内存的易于读取的文件。但是,当我想发送一个较大的文件时,比如.exe或大型.pdf文件,我会收到内存错误。这是因为在尝试发送或接收文件之前,我必须指定byte[]缓冲区的大小。在从流中读取缓冲区时,是否有方法获取缓冲区的大小

我想这样做:

//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.
有人能给我一些建议,告诉我如何从流中获取字节[]的长度吗


谢谢,

网络层无法知道响应流的长度

然而,服务器应该告诉你它有多长;查看
内容长度
响应标题。

如果该标题缺失或不正确,则表示您运气不佳;您需要一直读取,直到数据用完。

您可以使用流的
CopyTo
方法

您也可以直接写入文件

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