使用webclient下载文件.DownloadFileAsync有0KB



我正在尝试下载zend-framework(从http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip)简单地使用WebClient

string url = "http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip";
WebClient downloader= new WebClient();
downloader.DownloadFileAsync(new Uri(url), "C:\temp.zip");

文件已创建,但为空。我使用fiddler检查响应,我得到HTTP 200,正确的内容长度,但"连接:关闭"和fiddler显示"-1"在"身体"列。

我试过添加用户代理(从谷歌chrome请求复制)和"连接:保持活力"的标题,但这些都没有帮助。我也很确定,我的程序以前使用相同的URL下载过一两次这个文件。WebClient触发的事件中没有错误。

任何想法?

好了,我终于找到答案了!在下载文件之前,我通过发送HttpWebRequest来检查其大小。问题是,我没有关闭()响应。

谢谢你的回答,它们是很好的线索。

只是我的猜测:也许你可以尝试保持WebClient实例在一些地方不会被垃圾收集。当DownloadFileCompleted事件触发时,您只需清除对WebClient实例的引用,并让GC稍后回收内存(并且不要忘记调用Dispose方法)。

尝试处理DownloadProgressChangedDownloadFileCompleted事件

private void button1_Click(object sender, EventArgs e)
  {
   string url = "http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip";
   WebClient downloader = new WebClient();
   downloader.DownloadFileCompleted += new AsyncCompletedEventHandler(downloader_DownloadFileCompleted);
   downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloader_DownloadProgressChanged);
   downloader.DownloadFileAsync(new Uri(url), "C:\temp.zip");
  }
 void downloader_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
   {
      label1.Text = e.BytesReceived + " " + e.ProgressPercentage;
    }
  void downloader_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
   {
       if (e.Error != null)
         MessageBox.Show(e.Error.Message);
       else
         MessageBox.Show("Completed!!!");
   }

如果您在Windows中启用了UAC,则"C:temp.zip"中的下一行将无法保存文件,因为您不允许在没有提升权限的情况下在用户目录外写入:

downloader.DownloadFileAsync(new Uri(url), "C:\temp.zip");

相关内容

  • 没有找到相关文章

最新更新