易于使用的可恢复 .NET 文件下载器






4.82/5 (36投票s)
2006年6月10日
2分钟阅读

142704

3012
一个简单、易于使用的可恢复 .NET 文件下载器。
引言
这是一个简单易用的文件下载器类,用于 .NET 项目中。该实现很小,并且 API 很干净。它支持恢复下载,并具有描述性的错误异常。
背景
这基于 John Batte 最初的 CodeProject 实现,它工作良好。我将他的代码用于 InstallPad,并且觉得有必要进行一些改进并分享它们。
- 大大简化了 API
- 支持 ftp:// 和 file:// URLs
- 提供有用的进度信息
- 从服务器获取文件名,允许从带有查询字符串的 URL 下载,例如,http://server.com/?file
- 移除 WaitHandles
- 作为 .cs 文件分发,而不是令人遗憾的 EXE 安装程序
- 从 URL 列表下载,以防其中一个 URL 失败
- 代理支持
- 描述性异常 - 您将获得类似“Error saving file (file)”而不是“路径中的无效字符”,原始异常可以作为内部异常访问
- 在 Visual Studio 2005 中编译没有警告
使用代码
使用下载器非常简单。您可以同步或异步调用它。同步调用将在进行到该方法的下一行之前下载整个文件。异步调用将让您的方法继续执行,而下载器在后台工作。您可以通过订阅其事件来监听下载进度。这是一个简单的示例,用于下载 FireFox
static void Main(string[] args)
{
FileDownloader downloader = new FileDownloader();
// Listen for when the download completes.
downloader.DownloadComplete +=
new EventHandler(downloader_DownloadedComplete);
// Listen as each new packet of data comes in.
downloader.ProgressChanged +=
new DownloadProgressHandler(downloader_ProgressChanged);
// Download synchronously
downloader.Download("http://download.mozilla.org/" +
"?product=firefox-1.5.0.4&os=win&lang=en-US");
}
static void downloader_ProgressChanged(object sender, DownloadEventArgs e)
{
// DownloadEventArgs has lots of progress information
Console.WriteLine("Progress " + e.PercentDone);
}
static void downloader_DownloadedComplete(object sender, EventArgs e)
{
Console.WriteLine("Download complete.");
}
您可以使用以下方法之一开始下载
Download(string url)
Download(string url, string destFolder)
Download(List<String> urlList)
Download(List<String> urlList, string destFolder)
每个都有异步版本
AsyncDownload(string url)
AsyncDownload(string url, string destFolder)
AsyncDownload(List<String> urlList)
AsyncDownload(List<String> urlList, string destFolder)
您可以随时使用 Cancel()
方法取消下载。
此代码还支持使用代理。您可以构建一个 IWebProxy
对象,并通过下载器的 Proxy
属性将其分配给下载器。
未来工作
欢迎任何人贡献
- 错误:代码可能不是没有错误的,所以任何错误报告都会得到修复。
- 支持访问安全下载站点的凭据。
历史
2006 年 10 月 25 日 - 更新
- 支持从 URL 列表下载,以防其中一个 URL 关闭 (Zac Ruiz)
- 添加了对代理的支持
2006 年 7 月 31 日 - 更新
- 现在支持 ftp:// 和 file:// URL(只有 HTTP 是可恢复的,支持这些会增加对 .NET 2.0 的硬性要求)。文件 URL 必须采用以下形式
- file:///c:/myfolder/myfile.txt,或者
- file://///networkMachine/sharedFolder/file.txt
(是的,那是五个斜杠。)
- 现在可以下载 0 字节的文件(在磁盘上创建一个空的占位符文件)
- 在某些情况下,异常更加准确