Загрузите файл - VB6

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

6
задан Peter O. 26 November 2012 в 13:47
поделиться

5 ответов

Если вы хотите сделать это только с кодом (нет управления передачей через Интернет), 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

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

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

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

.
6
ответ дан 8 December 2019 в 18:37
поделиться

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

0
ответ дан 8 December 2019 в 18:37
поделиться

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

.
0
ответ дан 8 December 2019 в 18:37
поделиться

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

6
ответ дан 8 December 2019 в 18:37
поделиться

Мне не нравится Internet Transfer Control, потому что он синхронный. Как только вы запускаете загрузку, ваше приложение не реагирует до тех пор, пока не будет загружен файл или не будет выброшена ошибка. Есть много хороших примеров использования WININET DLL для записи асинхронных методов. Это не тривиально, но и очень выполнимо. Здесь приведен пример из stackoverflow.

.
0
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: