![]() |
Verbindung zum FTP-Server über mehrere Prozeduren hinweg
Hallo,
ich schreibe gerade an einem Programm, das sehr häufig kontakt zu einem ftp-Server aufnimmt und Dateien hoch- und runterlädt. Dazu benutzte ich bisher immer folgende Funktionen:
Delphi-Quellcode:
Nun dachte ich mir, dass es doch evtl. viel Zeit sparen würde, wenn man nicht jedesmal neu eine Verbindung zum Server aufnimmt und diese dann schließt (das kam mehrmals während einer Prozedur vor), sondern zum Programmstart die Verbindung eingeht und zum Ende diese wieder schließt. Dazu wollte ich dann hconnect global definieren, damit dann beim ftpputfile darauf zugegriffen werden kann. Vielleicht ist dieser Gedankengang etwas dilettantisch, ich kenne mich mit der Materie halt nicht so gut aus. Auf jeden Fall hat das so nicht hingehauen - ich nehme an, ich habe da einen groben Denkfehler drin.
function TForm1.putfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean;
var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpPutFile(hconnect, pchar(localfile), pchar(remotefile), FTP_TRANSFER_TYPE_UNKNOWN, 0); InternetCloseHandle(hconnect); end; function TForm1.getfile(server, username, password, remotefile, localfile: string; port: word = 21): boolean; var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpgetFile(hconnect, pchar(remotefile), pchar(localfile), false, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_ASCII,0); InternetCloseHandle(hconnect); end; Hat vielleicht jemand von euch eine Idee, wie ich das richtigmachen könnte - bzw. kann mir jemand sagen, ob das überhaupt geht? Allen Antwortern schon mal vielen Dank im Vorraus! Samufi |
Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg
wenn du verbunden bist bist du verbunden ^^ nach ner procedure wird die verbindung net unterbrochen außer vom FTP aus wegen inaktivität.
bau doch ne abfrage hinein mit "if not FTP.Connected then" und rufst nur dann eine procedure auf ^^ |
Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg
Danke für die Antwort!
Aber was setze ich dann für hconnect ein? Das müsste ich dann doch global definieren oder nicht?! Bisher hats noch nicht funktioniert (vielleicht stelle ich mich auch beim globalen definieren falsch an...) Muss ichs überhaupt global definieren, wenn ja, wie mache ich das richtig? |
Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg
Du solltest sämtlichen Code, der für den Zugriff auf den FTP-Server zuständig ist in einer Klasse kapseln.
Dein Formular legt dann ein Objekt dieser Klasse an, öffnet zu Beginn den FTP-Server und kann dann über die bestehende Verbindung bequem Dateien hoch- und runterladen. Du hast Glück, denn ich habe so eine Klasse schon vor längerer Zeit geschrieben. :angel: ![]() PS: globale Handles sind Mist! Kapseln in Klassen ist der saubere Weg |
Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg
Hmmm, ich hab jetzt dein InetTools eingebunden, aber ich hab irgendwie noch keinen Plan, wie ich damit jetzt umgehe. Könntest du mir vielleicht ein ungefähres Beispiel für den Quellcode geben, mit dem ich das hconnect global zugänglich machen kann? (Vielleicht hab bin ich immer noch auf dem falschen Dampfer... :gruebel: )
|
Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg
Es ist ein Beispielprojekt dabei, in dem alle Methoden demonstriert werden.
Du brauchst dich um keine Handles mehr zu kümmern. Aber mal so als Kurzeinstieg: 1.) Objekt im Formular deklarieren
Delphi-Quellcode:
2.) Objekt erzeugen (und zerstören)
uses ...., InetTools;
TForm1 = class(TForm) .... private { Private-Deklarationen } ftp : TInetFTP; .. end;
Delphi-Quellcode:
3.) FTP-Server (einmalig) öffnen
procedure TForm1.FormCreate(Sender: TObject);
begin ftp := TInetFTP.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin ftp.Free; end;
Delphi-Quellcode:
4.) Dateien hoch- und runterladen
ftp.Server := 'ftp.wasauchimmer.com'
ftp.User := 'anonymous'; ftp.Password := 'egal'; ftp.Connect(True);
Delphi-Quellcode:
ftp.GetFile('testfile.txt', 'C:\testfile.txt'); // download
ftp.PutFile('C:\autoexec.bat', 'a.bat'); // upload |
Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg
Vielen Dank!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz