【发布时间】:2009-12-29 18:36:16
【问题描述】:
有谁知道如何下载文件(无需打开网页)并将其保存到 Visual Basic 6.0 中的目录中?
【问题讨论】:
-
还有 81 个问题,只有 4 票???
-
您不需要在帖子中包含签名 - 您的用户卡会自动添加。阅读FAQ了解更多详情。
有谁知道如何下载文件(无需打开网页)并将其保存到 Visual Basic 6.0 中的目录中?
【问题讨论】:
如果您只想使用代码(无 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调用上面的函数,清除缓存。
【讨论】:
您不需要 API 调用,也不需要 Internet 传输控件。只需使用本机 VB6 代码即可。这是一个很好的 article by Karl Peterson 示例代码。
【讨论】:
试试这个
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
【讨论】:
【讨论】:
您需要使用 Internet 传输控件,请参阅http://www.vb-helper.com/howto_get_file_from_web.html 以获取示例。如果您需要指定凭据,请同时查看http://support.microsoft.com/kb/173264。
【讨论】:
我不喜欢 Internet 传输控制,因为它是同步的。开始下载后,您的应用程序将无响应,直到下载文件或引发错误。有很多使用 WININET DLL 编写异步方法的好例子。这不是微不足道的,但它也是非常可行的。 Here 是 stackoverflow 的一个例子。
【讨论】:
试试这个:
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")
【讨论】: