【问题标题】:Download File - VB6下载文件 - VB6
【发布时间】:2009-12-29 18:36:16
【问题描述】:

有谁知道如何下载文件(无需打开网页)并将其保存到 Visual Basic 6.0 中的目录中?

【问题讨论】:

  • 还有 81 个问题,只有 4 票???
  • 您不需要在帖子中包含签名 - 您的用户卡会自动添加。阅读FAQ了解更多详情。

标签: vb6 download


【解决方案1】:

如果您只想使用代码(无 Internet 传输控制),VBNet.mvps.org 有一篇非常好的使用 URLDownloadToFile API 调用的方法文章。

来自文章:

URLDownloadToFile API 可用 在所有版本的 Windows 上 操作系统(Win3除外, WinNT3.x)。通过传递远程文件 名称和本地文件路径和名称, API 下载 指定的文件将它们保存为 目标名称。该功能适用​​于 所有文件类型 - 纯文本、图像、 html、mpg、wav 和 zip 文件等。 无需修改例程或 担心正在下载的文件, 也没有任何明显的大小 限制或限制。

Private Declare Function URLDownloadToFile Lib "urlmon" _
   Alias "URLDownloadToFileA" _
  (ByVal pCaller As Long, _
   ByVal szURL As String, _
   ByVal szFileName As String, _
   ByVal dwReserved As Long, _
   ByVal lpfnCB As Long) As Long

Private Const ERROR_SUCCESS As Long = 0
Private Const BINDF_GETNEWESTVERSION As Long = &H10
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000

Public Function DownloadFile(sSourceUrl As String, _
                             sLocalFile As String) As Boolean

  //'Download the file. BINDF_GETNEWESTVERSION forces 
  //'the API to download from the specified source. 
  //'Passing 0& as dwReserved causes the locally-cached 
  //'copy to be downloaded, if available. If the API 
  //'returns ERROR_SUCCESS (0), DownloadFile returns True.
   DownloadFile = URLDownloadToFile(0&, _
                                    sSourceUrl, _
                                    sLocalFile, _
                                    BINDF_GETNEWESTVERSION, _
                                    0&) = ERROR_SUCCESS

End Function

仅供参考 - 在 Windows 7 上进行测试时,它只会返回缓存的版本,所以我必须先使用文章中提到的额外功能来清除它(这很有效)。

Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
   Alias "DeleteUrlCacheEntryA" _
  (ByVal lpszUrlName As String) As Long

那么就先用目标URL调用上面的函数,清除缓存。

【讨论】:

【解决方案2】:

您不需要 API 调用,也不需要 Internet 传输控件。只需使用本机 VB6 代码即可。这是一个很好的 article by Karl Peterson 示例代码。

【讨论】:

  • 有一些我以前从未见过的东西。我有一个使用 WININET 库的完整课程,所以如果我需要再次在 VB 中执行此操作,我可能会坚持这样做,但有替代方案总是好的。
  • 如果 Internet Explorer 的离线属性为 true,这将不起作用。您将收到文件未找到错误。
【解决方案3】:

试试这个

Sub DownloadFile(url, path)

   Dim objReq
   Dim objStream

   Set objReq = CreateObject("MSXML2.XMLHTTP")
   objReq.Open "GET", url, False
   objReq.send

   If objReq.Status = 200 Then
       Set objStream = CreateObject("ADODB.Stream")
       objStream.Open
       objStream.Type = 1

       objStream.Write objReq.ResponseBody
       objStream.Position = 0

       objStream.SaveToFile path, 2
       objStream.Close
       Set objStream = Nothing
   End If

   Set objReq = Nothing

End Sub

【讨论】:

  • 我不知道为什么这个答案是没有分的。这是唯一在没有inet控制的情况下真正有效的答案。感谢您的帮助。
【解决方案4】:

我建议使用Internet Transfer Control

【讨论】:

    【解决方案5】:

    您需要使用 Internet 传输控件,请参阅http://www.vb-helper.com/howto_get_file_from_web.html 以获取示例。如果您需要指定凭据,请同时查看http://support.microsoft.com/kb/173264

    【讨论】:

      【解决方案6】:

      我不喜欢 Internet 传输控制,因为它是同步的。开始下载后,您的应用程序将无响应,直到下载文件或引发错误。有很多使用 WININET DLL 编写异步方法的好例子。这不是微不足道的,但它也是非常可行的。 Here 是 stackoverflow 的一个例子。

      【讨论】:

      【解决方案7】:

      试试这个:

      My.Computer.Network.DownloadFile (*File to download*, *What to save it as*)
      

      您必须在将其保存为的内容中为其指定一个文件名

      例子:

       My.Computer.Network.DownloadFile _
      ("http://www.cohowinery.com/downloads/WineList.txt", _
      "C:\Documents and Settings\All Users\Documents\WineList.txt")
      

      【讨论】:

      • 这看起来像VB.NET,问题是关于VB6
      猜你喜欢
      • 1970-01-01
      • 2018-11-13
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多