65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (36投票s)

2006年6月10日

2分钟阅读

viewsIcon

142704

downloadIcon

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 字节的文件(在磁盘上创建一个空的占位符文件)
  • 在某些情况下,异常更加准确

2006 年 6 月 10 日 - 初始版本

© . All rights reserved.