2009-12-29 4 views
6

Qualcuno sa come scaricare un file (senza aprire una pagina Web) e salvarlo in una directory in Visual Basic 6.0?Download File - VB6

+0

** E 81 Q con solo 4 voti ??? ** –

+1

Non è necessario includere la firma nel post - la scheda utente viene aggiunta automaticamente. Leggi [FAQ] (http://stackoverflow.com/faq#signatures) per maggiori dettagli. – Artemix

risposta

6

Se si desidera farlo solo con il codice (nessun controllo di trasferimento Internet), VBNet.mvps.org ha un articolo how-to veramente valido che utilizza la chiamata API URLDownloadToFile.

Dall'articolo:

L'API è disponibile URLDownloadToFile su tutte le versioni del sistema operativo Windows (tranne WIN3, WinNT3.x). Passando il nome del file remoto e il percorso e il nome del file locale, , l'API scarica i bit del file specificato salvandoli come nome di destinazione . La funzione funziona con tutti i tipi di file - solo testo, immagini, html, MPG, WAV e file zip ecc senza modifiche alla preoccupazione routine o per il file in fase di download, né v'è alcuna apparente limitazione dimensioni o limitazione.

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 

CRONACA - nella sperimentazione su Windows 7, che sarebbe tornato solo la versione in cache, quindi ho dovuto utilizzare la funzione in più menzionato in questo articolo per cancellarlo prima (e che ha funzionato).

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

Quindi richiamare prima la funzione precedente con l'URL di destinazione, per cancellare la cache.

+3

Si ** non hanno bisogno di chiamate API **, ** non è necessario il controllo di trasferimento Internet **. Fallo in modo semplice, usando il codice nativo VB6. http://visualstudiomagazine.com/articles/2008/03/27/simple-asynchronous-downloads.aspx – MarkJ

+0

+1, grazie mille per avermi fatto conoscere queste chiamate API. –

0

Non mi piace Internet Transfer Control perché è sincrono. Una volta avviato il download, l'applicazione non risponde finché non viene scaricato il file o viene generato un errore. Esistono molti buoni esempi di utilizzo della DLL WININET per scrivere metodi asincroni. Non è banale, ma è anche molto abile. Here è un esempio di stackoverflow.

+0

È ** banale eseguire download asincroni in VB6 e non richiede chiamate API. Vedi la mia risposta http://stackoverflow.com/questions/1976152/download-file-vb6/1979417#1979417 – MarkJ

6

Non sono necessarie le chiamate API, non è necessario il controllo di trasferimento Internet. Fallo in modo semplice, usando il codice nativo VB6. Ecco un eccellente article by Karl Peterson con codice di esempio.

+0

C'era qualcosa che non avevo mai visto prima. Ho una classe completa che utilizza la libreria WININET, quindi se dovessi fare di nuovo ciò in VB probabilmente ci rimarrò, ma è sempre bene avere delle alternative. – jac

+0

Se la proprietà offline di Internet Explorer è vera, questo non funzionerà. Riceverai un errore di file non trovato. – kjack

-1

Try This:

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

Devi dargli un nome di file nel cosa per salvarlo come:

Esempio:

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

Sembra VB.NET, la domanda riguarda VB6 –

1

Prova questa

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 

maggiori dettagli http://smartreferences.blogspot.in

+0

Non so perché su questa risposta non ci sono punti. È l'unica risposta che funziona davvero senza controllo. Grazie per l'aiuto. –