Einzelnen Beitrag anzeigen

Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#1

Verbindung zum FTP-Server über mehrere Prozeduren hinweg

  Alt 29. Okt 2009, 15:35
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:
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;
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.
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
  Mit Zitat antworten Zitat