|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2001
Messaggi: 57
|
[VB/VC++] come fare ftp di file?
Salve, volevo sapere soprattutto in c++ (ma eventualmente come seconda opzione anche con VB) come potrei fare un programma che fa un ftp di file.
Ossia io dispongo di un certo file.xxx e voglio creare un programma che passandogli l'IP del destinatario come parametro, lo invii (ftp, udp.. insomma quello che sapete) ad un utente. Grazie mille e compl. per il forum! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
devi usare funzioni del tipo:
InternetOpen(.....) InternetConnect(......) FtpPutFile(.....) con i relativi parametri di inizializzazione; tutto questo lo trovi ben spiegato sul sito di Microsoft. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2001
Messaggi: 57
|
RE
Grazie della risposta...
stai parlando di VC++ o VB? Se è VC++ sarebbe meglio... sapresti dirmi di preciso il link dove cercarlo nella Microsoft? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
misterx : quelle sono per BC++B
Con VC++ & MFC (WinInet) : CInternetSession (prima crei questa e poi ottieni una delle due sotto) CFtpConnection CHttpConnection Altrimenti se vuoi passare da un livello più basso ci sono CSocket e CAsyncSocket... Con le API, sia per VC++ che VB...Windows Socket API : http://msdn.microsoft.com/library/de...piref_7v1u.asp |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
io le utilizzo e fanno parte della nutrita serie di funzioni presenti nel Win32sdk di Windows che dovrebbero funzionare in generale con tutti i compilatori; difatti vengono da qui: http://msdn.microsoft.com/library/de...ternetopen.asp |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Hai ragione...scusa...
Chissà perchè ero convinto che fossero del Borland... |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Oct 2001
Messaggi: 57
|
Oddio mi sa che è complicatina... ho cercato anche nei link proposti dal forum... se sapete magari qualche programma svolto per prendere spunto, postatemelo per favore.
Grazie mille. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In liena di massima non dovrebbe essere molto complicato..
Così ad occhio : CInternetSession s; CFtpConnection *f = s.GetFtpConnection(tutti i vari parametri); f->SetCurrentDirectory(dir); f->PutFile(tutti i vari parametri); f->Close(); |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Prova questo codice che dovrebbe essere universale, almeno lo credo al 90%.
Purtroppo non sono un raffinato alla Cionci, quindi pochi commenti ma..... funziona, l'ho appena provato, ti permette di scaricare un file da 25Kb dal sito ftp di Borland..... ricordati di inserire: #include "WININET.h" e di avere nella fase di link il file (lib): Inet.lib (magari in VC++ non vi è questa necessità) forza e coraggio, che non è poi così difficile: basta avere un pò di pazienza.. fammi sapere void *FINet; void *FFtpHandle; BOOL Transfer; FINet = InternetOpen("WININET1",0,NULL,0,0); if(FINet == NULL) { ShowMessage("Err(1) Connessione non riuscita!\nsicuro che i parametri sono corretti?"); return;} FFtpHandle = InternetConnect(FINet, "ftp.borland.com", //sito ftp 0, 0, // nome dell'utente 0, // password INTERNET_SERVICE_FTP, 0, 0); if(FFtpHandle == NULL) { ShowMessage("Err(2) Connessione FTP non riuscita!\nsicuro che i parametri sono corretti?\nOppure è presente un firewall di rete"); return;} Transfer = FtpGetFile(FFtpHandle, "/pub/bcppbuilder/techpubs/bcb5/b5cg.zip", "b5cg.zip", TRUE, 0, FTP_TRANSFER_TYPE_BINARY, 0); if(Transfer == NULL) { ShowMessage("Err(3) Ricezione file non riuscita!"); return; } else ShowMessage("File ricevuto con successo"); |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Oct 2001
Messaggi: 57
|
Azz... a me non funziona...
se lo inserisco coem l'hai scritto mi da errore nel file wininet.h: microsoft visual studio\vc98\include\wininet.h(48) : error C2146: syntax error : missing ';' before identifier 'HINTERNET' f:\programmi\microsoft visual studio\vc98\include\wininet.h(48) : fatal error C1004: unexpected end of file found Error executing cl.exe. inoltre io non devo scaricare un file dal server della borland, ma passarlo ad un altro utente via ftp. Grazie per l'aiuto |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
se devi inviare usa:
FtpPutFile() in luogo di: FtpGetFile() esempio: FFtpHandle = InternetConnect( FINet, "ftp.miosito.com", //oppure l'IP (192.xxx.xxx.xxx) che dovrebbe funzionare lo stesso 0, 0, // nome dell'utente 0, // password INTERNET_SERVICE_FTP, 0, 0); Transfer = FtpPutFile(FFtpHandle, "miofile.zip", "miofile.zip", FTP_TRANSFER_TYPE_BINARY, 0); Per quanto riguarda gli errori, molto strano, in quanto il codice postato l'ho scritto in modo lineare, come suggerisce Microsoft. Prova a vedere se il file da includere è un altro..... Non avendo VC++ non posso fare delle prove..... |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prova ad include in questo modo :
#include <windows.h> #include <wininet.h> |
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Oct 2001
Messaggi: 57
|
Ragà scusate se vi rompo ancora.. alla fine mi odierete... ecco il programma:
#include <windows.h> #include <wininet.h> void main() { void *FINet; void *FFtpHandle; BOOL Transfer; FINet = InternetOpen("WININET1",0,NULL,0,0); if(FINet == NULL) { //ShowMessage("Err(1) Connessione non riuscita!\nsicuro che i parametri sono corretti?"); return;} FFtpHandle = InternetConnect( FINet, "ftp.miosito.com", //oppure l'IP (192.xxx.xxx.xxx) che dovrebbe funzionare lo stesso 0, 0, // nome dell'utente 0, // password INTERNET_SERVICE_FTP, 0, 0); if(FFtpHandle == NULL) { // ShowMessage("Err(2) Connessione FTP non riuscita!\nsicuro che i parametri sono corretti?\nOppure è presente un firewall di rete"); return;} Transfer = FtpPutFile(FFtpHandle, "miofile.zip", "miofile.zip", FTP_TRANSFER_TYPE_BINARY, 0); if(Transfer == NULL) { // ShowMessage("Err(3) Ricezione file non riuscita!"); return; } // else // ShowMessage("File ricevuto con successo"); } Ho messo // su Showmessage perchè non mi riconosce la funzione, ma al massimo le posso cambiare con printf... Cmq non mi dà errori di compilazione, ma facendo il build ottengo questa roba strana: Linking... prova.obj : error LNK2001: unresolved external symbol __imp__FtpPutFileA@20 prova.obj : error LNK2001: unresolved external symbol __imp__InternetConnectA@32 prova.obj : error LNK2001: unresolved external symbol __imp__InternetOpenA@20 Debug/prova.exe : fatal error LNK1120: 3 unresolved externals Error executing link.exe. ç_ç |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Project -> Settings -> Link -> Object/Library modules...mettici Inet.lib...
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Oct 2001
Messaggi: 57
|
Oddio perchè sono così imbranato..... vi prego perdonatemi...
ho messo inet.lib ma mi dà Linking... LINK : fatal error LNK1104: cannot open file "Inet.lib" Error executing link.exe. Ho aggiunto Inet.lib nella linea Object/library modules Le altre impostazioni sono: Category: general Output file name: Debug/prova.exe Object library modules: kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Inet.lib sono spuntati: general debug info;link incrementally Scusate oggi mi sento ultra rompiball... |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Oct 2001
Messaggi: 57
|
ehm.. non so se ho fatto bene, ma ho copiato WININET.LIB in \debug , l'ho aggiunto in prokect/setting e ora pare funzionare, faccio alcune prove e poi vi dico.
Grazie mille! Un ultima considerazione: in "ftp.miosito.com", //oppure l'IP (192.xxx.xxx.xxx) che dovrebbe funzionare lo stesso devo mettere l'ip della macchina che funiona da server del file? Perchè provando ad autopassarmi il file compare l'errore proprio di quel punto: Err(2) Connessione FTP non riuscita!\nsicuro che i parametri sono corretti?\nOppure è presente un firewall di rete |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Bastava mettere Wininet.lib...senza copiarlo nella dir...
Per il resto non so cosa dirti... |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Mi sa che hai fatto benissimo ad usare wininet.lib in quanto, essendo passato un pò di tempo, non mi ricordo dove cavolo avevo preso la Inet.lib, forse l'avevo ricompilata x BCB.
Sorry se ti ho depistato Dai che ci siamo |
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Oct 2001
Messaggi: 57
|
Si infatti, vi ringrazio a tutti e due siete stati gentilissimi...
Misterx, un'ultima spiegazione.... "ftp.miosito.com", //oppure l'IP (192.xxx.xxx.xxx) qyesto dovrebbe essere l'indirizzo del server dico bene? che senso ha metter eun generico ftp.miosito.com? devo mettere l'indirizzo ip del server (quello che inizia con 192.... e non quello del mio pc che inizia con 245....) Transfer = FtpPutFile(FFtpHandle, "miofile.zip", "miofile.zip", al posto di mio file.zip, in entrambi, devo mettere la giyusta path del file risiedente nel pc del server? |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
nel caso vuoi inviare un file presente nel tuo hard-disk al tuo sito, dovrai scrivere semplicemente solo i nomi dei file sorgente/destinazione in quanto il percorso di destinazione vengono risolti automaticamente nel momento in cui tu apri la connessione col nome del sito ftp, username, e tua password. esempio: voglio traferire un file JPEG di nome miafoto.jpg sul mio sito presente su digiland, il mio username=pinco, la password=pallino quindo scriverò: FFtpHandle = InternetConnect( FINet, "ftp.digiland.it", 0, "pinco", "pallino", INTERNET_SERVICE_FTP, 0, 0); if(FFtpHandle == NULL) { // gestione dei valori di ritorno return;} Transfer = FtpPutFile(FFtpHandle, "miafoto.jpg ", "miafoto.jpg ", FTP_TRANSFER_TYPE_BINARY, 0); Scusa per le banalità ma sono presenti solo per chiarezza. Spero di essere stato chiaro |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:45.



















