【问题标题】:WebClient.DownloadFile File CorruptWebClient.DownloadFile 文件损坏
【发布时间】:2013-10-07 14:14:20
【问题描述】:

我正在尝试直接从 url 列表下载文件。

除了 .docx 之外,我能够成功下载大多数文件。我能够下载 .docx 文件,但是当我尝试打开它时,错误消息显示 "The file is corrupt and cannot be opened",当我尝试使用 Microsoft Word 修复它时,我收到另一条错误消息说"Microsoft Office cannot open this file because some parts are missing or invalid"。下载 pdf 文件时我没有任何问题。

我的代码很简单,看起来像这样:

WebClient webClient = new WebClient();
webClient.DownloadFile("http://somehost/somefile.docx", "C:\\somefolder\\somefile.docx");
webClient.Dispose(); //I added this line just to see if it will fix the problem but no it didn't

我访问了浏览器中的 url,并确保文件确实存在并且没有损坏。网址很好,我可以直接从浏览器中的网址下载文件并打开文件。

其他信息:

我确实发现 pdf url 和 docx url 有所不同,但我真的认为这与我的问题无关。当我在浏览器中访问 pdf url 时,pdf 显示在浏览器中。但是,当我转到 docx url 时,页面没有显示任何内容,但文件的下载会自动开始。我不认为这会有所作为,但仅供参考。

编辑上午 10:38

我刚刚尝试了异步方法。我能够下载 docx 文件并打开它,但它显示为空白 word 文档,仍然不正确。我从浏览器下载的同一个 docx 文件确实有内容。

webClient.DownloadFileAsync(new Uri("http://somehost/somefile.docx"),"C:\\somefolder\\somefile.docx");

【问题讨论】:

  • 文件是否公开?您是否需要特殊凭据才能访问它?饼干等?
  • @Arran 文件都是公开的,这是一个免费的在线存档站点
  • 不直接相关,但不是手动调用Dispose,而是查看using关键字。这是更好的做法!
  • @GeraldVersluis 我最初没有该行,我添加了它以查看是否会以某种方式成功下载文件但它没有(就像我所期望的那样)。我也只是尝试过使用关键字,但该方法也不起作用。
  • 您能否提供您正在下载的文件的实际地址?我在一个测试站点上尝试了一个 .docx 文件,它运行良好。

标签: c# file download webclient


【解决方案1】:

DownloadFileAsync 在后台下载文件,您的应用程序可能在下载完成之前终止。

您应该等待 DownloadFileCompleted 事件,或使用将等待文件下载的 DownloadFile 方法。

【讨论】:

    【解决方案2】:

    感谢大家的帮助,我真的很感激。

    我意识到问题实际上是我没有正确连接网址。对了,我犯了一个愚蠢的错误……

    WebClient 没有因格式不正确(无论出于何种原因)引发错误,而且我的日志文件没有记录我尝试连接的实际 url,所以我没有意识到它做错了。

    无论如何,感谢大家的帮助和帮助我找出问题所在的 cmets。

    【讨论】:

    • 现在接受您的答案作为答案,这样其他用户就不会再阅读该问题了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2015-03-14
    • 2012-04-27
    • 2014-03-31
    • 2019-04-17
    • 2020-09-27
    • 2019-11-29
    相关资源
    最近更新 更多