EDIT: Ach und mach mal bei deiner getFile Funktion immer try...finally rein. Die anderen Handles musst du auch mit InternetCloseHandle beenden.
Verweise nochmal darauf, da ich dass nachdräglich gemacht habe.
Die WinInet-
API für
FTP ist so konzipiert das du nur eine Datei Pro Seesion downloaden oder hochladen kannst. Deshalb auch der try...finally Block für jeden HINTERNET
Handle den du hast.
Ändere mach das so ab:
Delphi-Quellcode:
function getfile(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);
try
hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
try
Result := FtpGetFile(hconnect, pchar(localfile), pchar(remotefile), false, fmCreate, FTP_TRANSFER_TYPE_UNKNOWN or INTERNET_FLAG_RELOAD, 0);
finally
InternetCloseHandle(hconnect);
end;
finally
InternetCloseHandle(hopen);
end;
end;
Und @Dalai: Eigentlich brauch er gar kein Delay, da FTPGetFile erst zurückgibt in diesem Fall, wenn er die Datei hat oder wenn es fehlschlägt.
Gruß NickelM