PDA

View Full Version : [VB] Prelevare un file da un ftp ....


leon84
18-05-2005, 12:31
Salve,
ho l'esigenza da un mio programma di prelevare un file da un ftp remoto e metterlo in locale in una determinata cartella .... Come fare ????

Esiste qualche funzioncina veloce veloce ????

cionci
18-05-2005, 13:16
Const scUserAgent = "API-Guide test program"
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000
Const sURL = "http://www.microsoft.com/index.htm"
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByRef hInet As Long) As Long
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Sub Form_Load()
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: [email protected]

Dim hOpen As Long, hFile As Long, sBuffer As String, Ret As Long
'Create a buffer for the file we're going to download
sBuffer = Space(1000)
'Create an internet connection
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
'Open the url
hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
'Read the first 1000 bytes of the file
InternetReadFile hFile, sBuffer, 1000, Ret
'clean up
InternetCloseHandle hFile
InternetCloseHandle hOpen
'Show our file
MsgBox sBuffer
End Sub

leadergl
18-05-2005, 13:21
e se l'FTP è protetto con password?

cionci
18-05-2005, 13:25
Dvorebbe funzionare il link in questo modo: ftp://user:password@tuoserver/path/fieldascaricare

leadergl
18-05-2005, 13:27
...interessante....no xkè stavo pensando di realizzare un modulo tipo "Update Online" per il mio programma (scritto in VB)...è una cosa complicata? sapresti consigliarmi la strada più semplice e funzionale?

cionci
18-05-2005, 13:33
Questa va benissimo...attento che il file viene scaricato tramite IE (non proprio IE, ma qualche sua DLL)...quindi i file e link passano nella directory dei file temporanei...

Questa è la più generica e funziona per qualsiasi URL...le API specifiche per FTP sono, ad esempio, la FtpGetFile...

Poi ovviamente puoi usare anche i socket...ma diventa più compliacato...

leadergl
18-05-2005, 13:39
secondo te se volessi creare una interfaccia, diciamo sul genere di quella Windows oppure "Norton" per l'update del suo Antivirus...o anche quella di altri antivirus e cose varie, in che strada mi conviene procedere?

Nel senso che vorrei creare una cosa che:
1) se disponibile aggiornamento lo mostri e faccia scegliere all'utente se aggiornare
2) renda obbligatorio l'aggiornamento di alcuni files se ne sono selezionati altri (tipo aggiorni l'eseguibile allora di conseguenza anche qualche DLL indispensabile per il nuovo funzionamento)
3) lasci libera scelta su tutto quello che non è indispensabile

non ho mai realizzato moduli di "Aggiornamenti Online" quindi non so bene come muovermi...

cionci
18-05-2005, 18:56
Suddividi il prodotto in pacchetti indipendenti...ogni pacchetto ha un numero di versione...
Prima di tutto ti scarichi un file contenente i vari pacchetti con i rispettivi numeri di versione aggiornati (ed eventualmente le dipendenze da altri pacchetti)...
Confronti il tutto con le versioni installate ed ottieni la lista di pacchetti da installare...
A questo punto lasci all'utente la decisione di specificare quali pacchetti vuole scaricare...ovviamente se c'è una dipendenza devi impedire di scaricare il solo pacchetto, ma anche tutte le sue dipendenze...

leon84
18-05-2005, 21:28
In quel codice che hai postato devo solo cambiare l'url del file da prelevare giusto ????

Ma volendo fare con l'api ftpgetfile è più complicato ???????

Il codice che hai postato presuppone che sulla macchina ci sia IE ?

cionci
19-05-2005, 00:42
In quel codice che hai postato devo solo cambiare l'url del file da prelevare giusto ????

Ma volendo fare con l'api ftpgetfile è più complicato ???????

Il codice che hai postato presuppone che sulla macchina ci sia IE ?
Solo cambiare l'url... Con ftpgetfile sarebbe più complicato...
Comunque vai su www.allapi.net e scarica APIGuide, ci sono gli esempi i VB per ogni funzione delle API...
Per la terza domanda credo che presupponga solo l'installazione di WinInet.ocx...che non so se presuppone l'installazione di IE o solo di una parte di IE...

leon84
19-05-2005, 09:16
Solo cambiare l'url... Con ftpgetfile sarebbe più complicato...
Comunque vai su www.allapi.net e scarica APIGuide, ci sono gli esempi i VB per ogni funzione delle API...
Per la terza domanda credo che presupponga solo l'installazione di WinInet.ocx...che non so se presuppone l'installazione di IE o solo di una parte di IE...

Ma questa ocx è inclusa nei sistemi Windows ?

cionci
19-05-2005, 10:02
Sì...fa parte delle API...
Il file è comunque WinInet.dll e necessita di almeno Internet Explorer 3 installato...