我指的是本文 http://www.geekpedia.com/tutorial179_Creating-a-download-manager-in-Csharp.html了解使用 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 });
}
}
你需要几个线程来完成这个任务。
首先,您启动第一个下载线程,创建一个网络客户端并获取文件大小。然后您可以启动几个新线程,其中添加下载范围标头。
您需要一种逻辑来处理下载的部分,并在完成后创建新的下载部分。
http://msdn.microsoft.com/de-de/library/system.net.httpwebrequest.addrange.aspx http://msdn.microsoft.com/de-de/library/system.net.httpwebrequest.addrange.aspx
我注意到 WebClient 实现有时会出现奇怪的行为,因此如果您确实想编写一个“大”下载程序,我仍然建议您实现自己的 HTTP 客户端。
ps:感谢用户svick
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)