C#WebStream试图在“Chunks”中下载文件

时间:2011-08-07 12:40:44

标签: c# header stream httpwebrequest seek

我正在尝试制作一个小程序,通过HTTP在C#中下载文件。 使用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分成两部分。我的问题是,WebStreams不可寻找,所以我不能只设置一个阅读的位置。 如何使用不同的Streams同时设法通过HTTP同时下载一个文件(连接,我认为多个成员不能使用一个流)。 我在这里阅读了很多文章并用谷歌搜索了几个小时,但我找不到解决方案。 Chunked传输编码是否与此主题有关?

最诚挚的问候, 戴蒙

1 个答案:

答案 0 :(得分:4)

您需要在请求上调用AddRange - 这会在content range中设置http header,告诉服务器您要求的文件部分。

请参阅http://msdn.microsoft.com/en-us/library/dd992108.aspx