Qualcuno sa come scaricare un file (senza aprire una pagina Web) e salvarlo in una directory in Visual Basic 6.0?Download File - VB6
risposta
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.
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
+1, grazie mille per avermi fatto conoscere queste chiamate API. –
Io suggerirei di usare il Internet Transfer Control
È necessario utilizzare il controllo di trasferimento Internet, vedere http://www.vb-helper.com/howto_get_file_from_web.html per un campione. Se è necessario specificare le credenziali, controllare anche http://support.microsoft.com/kb/173264.
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.
È ** 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
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.
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
Se la proprietà offline di Internet Explorer è vera, questo non funzionerà. Riceverai un errore di file non trovato. – kjack
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")
Sembra VB.NET, la domanda riguarda VB6 –
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
Non so perché su questa risposta non ci sono punti. È l'unica risposta che funziona davvero senza controllo. Grazie per l'aiuto. –
** E 81 Q con solo 4 voti ??? ** –
Non è necessario includere la firma nel post - la scheda utente viene aggiunta automaticamente. Leggi [FAQ] (http://stackoverflow.com/faq#signatures) per maggiori dettagli. – Artemix