如何在WinForm应用程序中从web下载文件

3
我正在编写一个C#实用程序,需要能够从URL下载并保存文件。
我已经成功获取了来自Web服务调用的URL,但是我无法找到一个简单的示例来开始下载并将数据保存到磁盘文件中。
有人有这方面的好例子或者可以提供一个例子吗?
谢谢!
编辑 - 我应该提到这些文件的大小为3到4 GB。因此,如果针对这种大小的文件有特殊考虑,我将非常感激任何建议。

1
关于大文件 - 特别需要考虑的是,您将不得不实现某种恢复功能... - Daniel Mošmondor
3个回答

4

WebClient.DownloadData,该规范包含一个小示例。使用WebRequest.GetResponseStream并逐块保存数据可能更有效,但您必须正确准备WebRequest

更新

如果您必须下载3-4GB的文件,则必须做比.NET框架提供的更多工作。 WebClient立即被排除在外,因为它将内容作为单个整体byte[]返回。即使假设您的VAS(虚拟地址空间)连续的4GB可用于这些下载,.Net也无法分配大于2Gb的任何内容(在x64上也是如此)。因此,您必须使用流,例如GetResponseStream()。

其次,您必须根据HTTP / 1.1第3.12节实现HTTP范围单位。您的请求必须包含Content-Range头,以便能够恢复中断的下载。当然,您的目标服务器必须接受并识别这些标头,并可能用适当的accept-ranges响应,但很少有服务器这样做。

您需要做很多工作才能下载4Gb,这绝非易事。


1

只需使用 WebClient.DownloadFile(如果您不想在下载过程中冻结用户界面,则使用{{link2:WebClient.DownloadFileAsync}})


1

由于您有巨大的文件,请准备进行某种连接恢复。

无论您使用什么方法从http(WebClient、TcpStream等)获取内容,您都应该从一开始就考虑编写具有恢复功能的代码。这应该是重点。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接