创建下载加速器

我指的是使用C#来理解文件下载。

代码使用传统方法来读取Stream之类的

((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0 

如何将要下载的文件分成多个段,以便我可以并行下载单独的段并合并它们?

 using (WebClient wcDownload = new WebClient()) { try { // Create a request to the file we are downloading webRequest = (HttpWebRequest)WebRequest.Create(txtUrl.Text); // Set default authentication for retrieving the file webRequest.Credentials = CredentialCache.DefaultCredentials; // Retrieve the response from the server webResponse = (HttpWebResponse)webRequest.GetResponse(); // Ask the server for the file size and store it Int64 fileSize = webResponse.ContentLength; // Open the URL for download strResponse = wcDownload.OpenRead(txtUrl.Text); // Create a new file stream where we will be saving the data (local drive) strLocal = new FileStream(txtPath.Text, FileMode.Create, FileAccess.Write, FileShare.None); // It will store the current number of bytes we retrieved from the server int bytesSize = 0; // A buffer for storing and writing the data retrieved from the server byte[] downBuffer = new byte[2048]; // Loop through the buffer until the buffer is empty while ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0) { // Write the data from the buffer to the local hard drive strLocal.Write(downBuffer, 0, bytesSize); // Invoke the method that updates the form's label and progress bar this.Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] { strLocal.Length, fileSize }); } } 

你需要几个线程来实现这一目标。 首先,您启动第一个下载线程,创建一个webclient并获取文件大小。 然后你可以启动几个新的线程,它添加一个下载范围标题。 你需要一个逻辑来处理下载的部分,并在完成后创建新的下载部分。

http://msdn.microsoft.com/de-de/library/system.net.httpwebrequest.addrange.aspx

我注意到WebClient实现有时会出现奇怪的行为,所以如果你真的想写一个“大”的下载程序,我仍然建议你实现一个自己的HTTP客户端。

ps:感谢用户svick