![]() |
IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
Moin moin liebe DPler,
ich hab gerade mal eine Frage zu der IdFTP Komponente. Und zwar suche ich nun schon ne weile nach einer Möglichkeit abzufragen, ob diese gerade versucht eine Verbindung zu einem Server herzustellen und diesen Verbindungsaufbau abzubrechen, habe da aber bisher noch keine Lösung gefunden. Außerdem bin ich mir beim Beenden gerade etwas unsicher, denn ich habe in der FormCloseQuery im moment folgendes drin stehen:
Delphi-Quellcode:
Habe aber festgestellt, das wenn ich das Programm beende dies zweimal beenden muss, bevor die Anwendung geschlossen wird. Auch hier suche ich noch nach einer Lösung :|
procedure TMain_Form.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin CanClose := MessageDlg('Sind Sie sicher, das Sie das Programm schließen und beenden wollen?' + #13#10 + 'Alle laufenden Transfers werden abgebrochen!', mtConfirmation, [mbYes,mbNo], 0) = mrYes; if CanClose = true then begin { Überprüfe ob gerade Verbindung hergestellt wird } //LÖSUNG NOCH GESUCHT { FTP Verbindungen trennen } //Trenne if FTPSrv.Connected then begin //FTPSrv.Abort; FTPSrv.Disconnect; FTPSrv.Quit; end; //Beende Application.Terminate; end; end; Besten Dank im voraus für eure Unterstützung. |
AW: IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
Indys sind iirc blockierend - d.h. während eine Verbindung hergestellt wird, wird kein anderer Code ausgeführt.
Delphi-Quellcode:
procedure TMain_Form.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin CanClose := MessageDlg('Sind Sie sicher, das Sie das Programm schließen und beenden wollen?' + #13#10 + 'Alle laufenden Transfers werden abgebrochen!', mtConfirmation, [mbYes,mbNo], 0) = mrYes; if CanClose then // Nicht auf =true vergleichen! begin if FTPSrv.Connected then begin //FTPSrv.Abort; FTPSrv.Disconnect; FTPSrv.Quit; // beides nötig ??? end; Application.Terminate; // Sinnlos - du hast ja schon canclose auf true gesetzt end; end; |
AW: IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
Die saubere Trennung der FTP-Verbindung sieht so aus:
Delphi-Quellcode:
Man muss nicht einmal abfragen, ob noch eine Verbindung steht.
FTPSrv.Quit;
Wenn man statt Quit gleich die Methode Disconnect aufrufen würde, dann könnte es sein, dass der Server etwas "beleidigt" ist. Hier der kommemntierte Sourcecodeausschnitt von Indy 9:
Delphi-Quellcode:
Mit der Methode Abort kann man eine laufende Datenübertragung abbrechen.
procedure TIdFTP.Quit;
begin if Connected then begin WriteLn('QUIT'); // Server mitteilen, dass jetzt Feierabend ist end; Disconnect; // TCP/IP - Verbindung schliesen end; Das ist aber auch nicht die feine englische Art, denn so bleiben abgeschnittene Dateien übrig. |
AW: IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
Zitat:
Gut, aber mal angenommen ich habe gerade einen Transfer laufen und möchte die Anwendung beenden, dann muss der Transfer aber auch durch Quit "beendet" werden richtig? Oder muss ich in diesem Fall zusätzlich vorher noch einmal Abort aufrufen? Und in dem Fall würden dann ja sowohl mit ,als auch ohne Abort abgeschnittene Dateien übrog bleiben...?! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 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