我正在尝试制作一个小程序,通过c#中的HTTP下载文件。基本下载与WebClient工作良好,但现在我想尝试下载具有多个连接的文件。到目前为止:
HttpWebRequest HttpRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse HttpResponse = (HttpWebResponse)HttpRequest.GetResponse();
Stream ResponseStream = HttpResponse.GetResponseStream();
FileStream FSChunk = new FileStream(destination, FileMode.OpenOrCreate, FileAccess.Write);
while ((BytesThisRead = ResponseStream.Read(Buffer, 0, (int)BytesPerRead)) != 0)
{
FSChunk.Write(Buffer, 0, BytesThisRead);
TotallyRead += BytesThisRead;
if (TotalReadLength - TotallyRead < buffersize)
BytesPerRead = TotalReadLength - TotallyRead;
}
我可以使用这个ResponseStream下载文件,也可以使用一个ResponseStream分成2部分。我的问题是,WebStreams是不可寻找的,所以我不能只是设置一个位置来读取。我如何管理下载一个文件在HTTP同时使用不同的流(连接,我认为一个流不能被多个成员使用)。我在这里读了很多文章,在谷歌上搜索了几个小时,但我找不到解决方案。分块传输编码与这个主题有什么关系吗?
最诚挚的问候,达蒙
您需要在请求时调用AddRange
-这在http header
中设置了一个content range
,它告诉服务器您正在请求的文件的哪一部分。
见http://msdn.microsoft.com/en-us/library/dd992108.aspx