Скачать файл в VB6

кто-нибудь знает, как загрузить файл (без открытия веб-страницы) и сохранить его в каталог в Visual Basic 6.0?

7 ответов


Если вы хотите сделать это только с кодом (без управления передачей Интернета),VBNet.mvps.org имеет действительно хорошую статью, которая использует вызов API URLDownloadToFile.

из статьи:

доступен API URLDownloadToFile во всех версиях Windows операционная система (кроме Win3, WinNT3.икс.) Передавая удаленный файл Имя, Путь и имя локального файла, API загружает биты указанный файл сохраняет их как целевое имя. Функция работает с все типы файлов-plain text, изображения, 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

FYI-при тестировании в Windows 7 он будет возвращать только кэшированную версию, поэтому мне пришлось использовать дополнительную функцию, упомянутую в статье, чтобы очистить ее сначала (и что обработанный.)

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

затем просто вызовите вышеуказанную функцию с URL-адресом назначения, чтобы очистить кэш.


вам не нужны вызовы API, вам не нужен контроль передачи данных в Интернете. Просто сделайте это простым способом, используя собственный код VB6. Вот отличный статья Карла Петерсона с примерами кода.


попробуй такое

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

Подробнее см. http://smartreferences.blogspot.in


Я бы предложил использовать Управление Интернет-Передачей


вам нужно использовать управление передачей Интернета, см. http://www.vb-helper.com/howto_get_file_from_web.html для образца. Если вам нужно указать учетные данные, проверьтеhttp://support.microsoft.com/kb/173264 также.


Мне не нравится управление Интернет-передачей, потому что оно Синхронное. После запуска загрузки приложение не отвечает, пока файл не будет загружен или не будет выдана ошибка. Есть много хороших примеров использования функции wininet DLL для записи асинхронных методов. Она не тривиальна, но она также очень действенна. здесь является примером из 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")