我想创建自己的多线程文件下载器,并且 - 当我正在阅读和alpha测试一些代码示例时,我发现了一个奇怪的场景 - 当我测试下面的代码时,我粘贴了一个下载链接,服务器不支持SeekOperations,所以我必须在1个线程中下载文件。当我将相同的下载链接粘贴到例如FlashGet时,我看到该文件是分段的,并且它被8个线程同时下载。为什么?
int startPointInt = Convert.ToInt32(startPoint);
webRequest = (HttpWebRequest)WebRequest.Create(URLTextBox.Text);
webRequest.AddRange(100, 200);
webRequest.Credentials = CredentialCache.DefaultCredentials;
webResponse = (HttpWebResponse)webRequest.GetResponse();
Int64 fileSize = webResponse.ContentLength;
strResponse = webResponse.GetResponseStream();
if (startPointInt == 0)
strLocal = new FileStream(txtPath.Text, FileMode.Create, FileAccess.Write, FileShare.None);
else
strLocal = new FileStream(txtPath.Text, FileMode.Append, FileAccess.Write, FileShare.None);
int bytesSize = 0;
byte[] downBuffer = new byte[2048];
while ((bytesSize = strResponse.Read(downBuffer,0, downBuffer .Length)) > 0)
{
strLocal.Write(downBuffer, 0, bytesSize);
}
答案 0 :(得分:1)
快速的Google信息显示此链接:http://www.developmentnow.com/g/36_2003_12_0_0_203892/WebRequest-GetResponseStream-does-not-suppot-seek-operation--why-.htm
Joerg Joos建议: “您可以使用HTTP特定功能进行部分下载,例如”Range“标题。请查看HTTP 1.1规范以获取有关该主题的更多信息。”
听起来很合理!