【问题标题】:WebClient downloads an incomplete fileWebClient 下载不完整的文件
【发布时间】:2012-08-09 10:58:14
【问题描述】:

我写的这个方法一周前运行良好,但现在它下载了一个不完整的文件。原始文件将近 10mb,但正在下载的文件是 2k。我的代码基本上是这样的

Dim URL as string = "http://www.cqc.org.uk/sites/default/files/cqc_locations_export.csv"
Dim path as string = "C:\temp"        
Dim webClient As New WebClient
webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 (.NET CLR 3.5.30729)")
webClient.DownloadFile(URL, path)

知道这里出了什么问题吗?

干杯

【问题讨论】:

    标签: vb.net webclient


    【解决方案1】:

    这不是我的区域,但您可能会丢失文件的大小,如果它是二进制、char 编码和其他头数据。此外,这 2k 的文件可能是文件或元数据的一部分。

    【讨论】:

      【解决方案2】:

      DownloadFile 的第二个参数需要完整的文件名,而不仅仅是路径(C:\ 驱动器的根目录在 Windows 7 上受到保护,因此如果您尝试在此处写入,该方法可能会引发异常)

      注意:完成后不要忘记丢弃网络客户端。

      注意 2:我建议您使用 .NET 类名以外的名称来避免命名冲突。不要忘记 VB 不区分大小写(不像 C#)

      以下对我来说很好用:

      Dim URL As String = "http://www.cqc.org.uk/sites/default/files/cqc_locations_export.csv"
      Dim filename As String = "C:\temp\temp.csv"
      Using wc As New WebClient
           wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 (.NET CLR 3.5.30729)")
           wc.DownloadFile(URL, filename)
      End Using
      

      【讨论】:

        【解决方案3】:

        这可能是托管文件的站点存在问题,或者该站点处理 GET 请求的方式存在问题。我在下载从 DropBox 共享的 URI 时遇到了同样的问题。该文件大约 3 MB,但仅下载了前 112 KB。当我从 Screencast.com 下载同一个文件时,整个文件都被下载了。

        【讨论】:

          【解决方案4】:

          在地面上,您可能想尝试三件事:

          1. 使用管理员权限运行您的应用程序,因为 C 驱动器受保护 Windows 7 及更高版本。
          2. 暂时停止您的防病毒程序并尝试重新下载。
          3. 仅在下载完成时释放 webClient(在 DownloadFileCompleted 事件中)

          【讨论】:

            【解决方案5】:

            文档似乎建议(两种不同的变体)
            将客户端调暗为新 WebClient()

            昏暗客户端作为 WebClient

            【讨论】:

            • @user1460625 两个(我的)选项都错了吗?还是三个(或更多)都正确?
            • 您能解释一下为什么您认为其中一种方式会对发布的问题产生任何影响吗?
            • 一般来说,使用 MS 技术总是最好遵循他们的规则,因为你永远不知道其他选项可能有什么后门和副作用。如果所有选项都是正确的,那么你怎么能猜出这可能有什么副作用。顺便说一句:c:\temp 也可能是一个完整且有效的文件路径 - 其中名为 temp 的文件(没有扩展名)位于 C:\ 根目录中。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-30
            • 1970-01-01
            • 2022-01-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多