Saltar al contenido

Descargar archivo – VB6

Solución:

Si desea hacerlo solo con código (sin Control de transferencia de Internet), VBNet.mvps.org tiene un artículo de procedimientos realmente bueno que utiliza la llamada API URLDownloadToFile.

Del artículo:

La API URLDownloadToFile está disponible en todas las versiones del sistema operativo Windows (excepto Win3, WinNT3.x). Al pasar el nombre del archivo remoto y la ruta y el nombre del archivo local, la API descarga los bits del archivo especificado y los guarda como el nombre de destino. La función funciona con todos los tipos de archivos: archivos de texto sin formato, imágenes, html, mpg, wav y zip, etc. sin modificar la rutina o preocuparse por el archivo que se está descargando, ni existe ninguna restricción o limitación de tamaño aparente.

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

Para su información, en las pruebas en Windows 7, solo devolvería la versión en caché, por lo que tuve que usar la función adicional mencionada en el artículo para borrarla primero (y eso funcionó).

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

Luego, simplemente llame a la función anterior con la URL de destino primero, para borrar el caché.

No necesita llamadas a la API, no necesita el control de transferencia de Internet. Simplemente hágalo de la manera más fácil, utilizando código VB6 nativo. Aquí hay un excelente artículo de Karl Peterson con código de muestra.

Prueba esto

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *