Warum haben Dateien nach der Übertragung per FTP manchmal eine andere Größe oder sind beschädigt?

Ich habe ein Problem beim Herunterladen einer Datei mit der TidFTP-Komponente in Delphi XE2. Ich kann eine Verbindung zur FTP-Site herstellen, eine Liste der Dateien abrufen und den Befehl get ausführen. Wenn ich jedoch versuche, eine Datei mit dem Befehl get herunterzuladen, wird die Datei immer größer als die Quelldatei heruntergeladen. Dann ist die nachfolgende Datei beschädigt.

Wenn ich versuche, mehrere Dateien herunterzuladen, werden außerdem die ersten Dateidownloads (größer als die Quelle) und die verbleibenden Dateien übersprungen. Der Befehl get gibt keinen Fehler aus, er wird nur beendet. Ich habe versucht, mich in einige Ereignisse des TidFTP-Steuerelements wie AfterGet und OnStatus einzuklinken, aber alles scheint normal zu sein.

Ich habe versucht, mit einem FTP-Client eines Drittanbieters auf die Datei zuzugreifen und sie herunterzuladen, um sicherzustellen, dass es kein Problem mit unserem FTP-Server gab und der Download wie erwartet funktioniert hat. Ich denke also, dass es möglicherweise mit dem TidFTP-Steuerelement zusammenhängt oder dass ich etwas falsch mache.

Hier ist die Routine, mit der ich die Datei herunterlade:

var
  ftp: TIdFTP;
  strDirectory: string;
begin
  ftp := TIdFTP.Create(nil);
  try
    ftp.Host := 'ftp.myftpserver.com'
    ftp.Passive := false;
    ftp.Username := 'TestUser';
    ftp.Password := 'TestPassword';
    ftp.ConnectTimeout := 1000;
    ftp.Connect();
    ftp.BeginWork(wmRead);
    ftp.ChangeDir('/TestArea/');
    strDirectory := 'c:\test\';
    if not DirectoryExists(strDirectory) then
      CreateDir(strDirectory);
    ftp.Get('Test.zip', strDirectory + '\' + 'Test.zip', true, false);
   ftp.Disconnect();
  except
    on e: exception do
      showMessage(e.message);
  end;
end;

Antworten auf die Frage(1)

Ihre Antwort auf die Frage