2010-10-14 67 views
3

我正在写一个C#实用程序,我需要能够从URL下载和保存文件。如何在WinForm应用程序中从网上下载文件

我的代码正在从Web服务调用中获取URL,但是我无法找到如何开始下载并将数据保存到磁盘文件的简单示例。

有没有人有这方面的一个很好的例子,或者可以提供一个例子吗?

谢谢!

编辑 - 我应该提到这些文件的大小为3到4 GB。所以如果对这个尺寸的文件有特殊的考虑,我会很感激任何建议。

+1

回复:大文件 - 特别的问题是,你将不得不实施某种恢复... – 2010-10-14 22:51:15

回答

4

WebClient.DownloadData,该规范包含一个小样本。使用WebRequest.GetResponseStream并按块保存数据块可能更有效,但您必须自己准备WebRequest

更新

如果你要下载的文件3-4GB,那么你必须做很多比.net框架提供了什么等等。因为WebClient将内容作为一个整体字节[]返回,所以它是非常不合时宜的。即使假设您的VAS(虚拟地址空间)具有连续4GB在这些下载上刻录,.Net不能分配大于2Gb(在x64上)的任何。所以你必须使用流,如在GetResponseStream()中。

其次,您必须在请求中实现HTTP范围单元,如HTTP/1.1 section 3.12。您的请求必须包含Content-Range标题才能够恢复受损下载。当然,你的目标服务器将不得不接受和识别这些头文件,并且可能会用少数服务器做的事件accept-ranges来响应。

你的盘子满了,下载4Gb不过是微不足道的。

1

既然你有庞大的文件,对于某种联系的复苏做好准备。

无论您从http(WebClient,TcpStream,...)中找到什么方法,都应该从头开始编写恢复代码。这应该是重点。

为此,必须检查从GetResponseStream()返回的流是否支持Seek()