2009-12-29 112 views
6

¿Alguien sabe cómo descargar un archivo (sin abrir una página web) y guardarlo en un directorio en Visual Basic 6.0?Descargar archivo - VB6

+0

** Y 81 Qs con solamente 4 votos ??? ** –

+1

No necesita incluir la firma en su publicación - su tarjeta de usuario se agrega automáticamente. Lea [Preguntas frecuentes] (http://stackoverflow.com/faq#signatures) para obtener más detalles. – Artemix

Respuesta

6

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

Desde el artículo:

La API está disponible URLDownloadToFile 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 guardándolos como el nombre de destino . La función trabaja con todos los tipos de archivos de texto sin formato -, imágenes, html, mpg, wav y archivos zip etc. sin modificaciones a la preocupación de rutina o para el archivo de la descarga, ni hay ninguna restricción de tamaño aparente o limitación.

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 - en las pruebas en Windows 7, sería devolver sólo la versión en caché, así que tuve que utilizar la función adicional mencionado en el artículo para desactivarla primero (y que trabajó).

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

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

+3

** No necesita llamadas API **, ** no necesita el control de transferencia de Internet **. Solo hazlo de la manera más fácil, usando el código nativo VB6. http://visualstudiomagazine.com/articles/2008/03/27/simple-asynchronous-downloads.aspx – MarkJ

+0

+1, muchas gracias por presentarme estas llamadas API. –

0

No me gusta el control de transferencia de Internet porque es sincrónico. Una vez que inicia una descarga, su aplicación no responde hasta que se descarga el archivo o se produce un error. Hay muchos buenos ejemplos del uso de la DLL WININET para escribir métodos asincrónicos. No es trivial, pero también es muy factible. Here es un ejemplo de stackoverflow.

+0

Es ** trivial hacer descargas asincrónicas en VB6 y no requiere llamadas API. Ver mi respuesta http://stackoverflow.com/questions/1976152/download-file-vb6/1979417#1979417 – MarkJ

6

No necesita llamadas de API, no necesita el control de transferencia de Internet. Solo hazlo de la manera más fácil, usando el código nativo VB6. Aquí hay un excelente article by Karl Peterson con código de muestra.

+0

Había algo que nunca había visto antes. Tengo una clase completa usando la biblioteca WININET, así que si necesito hacer esto en VB de nuevo, probablemente me quedo con eso, pero siempre es bueno tener alternativas. – jac

+0

Si la propiedad fuera de línea de Internet Explorer es verdadera, esto no funcionará. Obtendrás un error de archivo no encontrado. – kjack

-1

intenta esto:

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

Debe darle un nombre de archivo en el lo que para guardarlo como:

Ejemplo:

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

Esto se parece a VB.NET, la pregunta es sobre VB6 –

1

probar este

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 

más detalles refiera http://smartreferences.blogspot.in

+0

No sé por qué en esta respuesta no hay puntos. Es la única respuesta que realmente funciona sin control. Gracias por la ayuda. –