2010-02-01 44 views
4

我需要下载一个文件从一个网站使用不同的线程和一次下载文件的不同部分,我知道我可以使用Webclient.downloadfile方法,但它不支持下载文件分块。如果你可以指向一个教程或给我一个想法如何做到这一点,我将不胜感激。谢谢!如何下载一个文件与多线程

回答

0

为了捎带雷克斯的答案,没有傻瓜的方式知道。一些网络服务器会为你提供一个内容长度,或者一些网络服务器将返回-1长度。令人讨厌的,我知道..

你最好的办法是指定一个固定的范围,并利用一些启发式或分析来确定随着时间的推移块的估计长度。

你也想看看这个类似的SO问题Multipart Downloading in C#

3

另一端的服务器,即提供文件的服务器,也必须支持以块的形式下载。它需要某种方式来指定要启动的文件中的哪个字节位置,而不是从第一个位置开始并发送,直到客户端停止接受它们,或者它到达文件末尾。

假设服务器确实支持,他们会提供一些关于如何使用它的文档,你一定会在这里找到帮助,把它变成代码。

0

WebClient对象有一个'Headers'属性,它应该让您定义一个'Range' header来只请求文件的一部分。

0

这里有很多IFS的,但如果你正在下载,比方说,一个巨大的文本文件,你实际上可以把它拆分成多个文件服务器上,并且每个地址返回给客户端(或使用文件名约定,只是报告如何许多部分),客户端可能会启动线程下载每个部分,然后它可以重新组成一个单一的大文件。

我不确定你的使用情况,但如果这是这个想法,这种特殊情况可能不会使任何事情变得更快。