NMFTP - Überprüfen ob gerade Dateien übertragen werden
-
Moin!
Ich habe eine FTP-Programm mit dem ich automatisch Dateien hochladen kann.
Nun wird durch eine Zeitschaltung die Verbindung nach einer gewissen Zeit getrennt.Das Problem ist, wenn das Ftp-Programm noch dabei ist Dateien hochzuladen und dabei die Verbindung getrennt wird, stürzt das Programm ab.
Nun meine Frage: Gibt es eine Möglichkeit die NMFTP-Komponente abzufragen, ob es gerade Dateien am hochladen ist?
-
Gibt es nicht, aber selbst wenn, was würde es dir helfen?
Du solltest lieber eine Fehlerbehandlung für Verbindungsabbrüche einbauen.
-
Danke für die Antwort.
Ich habe eine Fehlerbehandlung mittels try and catch(...) versucht
try { NMFTP1->UploadAppend(ListBox2->Items->Strings[k],ListBox2->Items->Strings[k+1]); } catch(...) { Edit4->Text = "TransferError"; }Leider stürzt das Programm trotzdem ab.
Kann mir jemand einen Ansatz zur Fehlerbehandlung geben?
-
Was genau heisst "stürtzt ab"?
Davon abgesehen ist gerade die FTP-Komponente aus dem FastNet-Paket als buggy verschrien. Ggf. solltest du lieber Indy verwenden.
-
Hast Du zufällig den Debugger eingeschaltet? Dann ist das mit den Exceptions so eine Sache. Wenn Du ohne Debugger kompilierst (und von außerhalb Borland startest?) könnte das schon anders aussehen.
-
Das Programm reagiert ,nach Trennung der Verbindung währen eines Uploads, nicht mehr ganz. Ich kann die Verbindung nicht wieder aufbauen und das Programm lässt sich nicht mehr beenden. Einzelne Dinge funktioniere noch, wie z.B.: Der Aufruf des Einstellungsformular.
Ich habe mein ganzes Programm auf die NMFTP-Komponente aufgebaut, jetzt auf eine andere Komponente umzusteigen ist denke ich mal viel Aufwand.
Das Programm reagiert gleich ob ich es von Borland aus starte oder asserhalb.
-
Ich habe nun einfach NMFTP1->Abort() vor dem NMFTP1->Disconnect() aufgerufen.
Das Problem ist jetzt nur noch die ErrorMessage, die automatisch angezeigt wird, sobald NMFTP1->Abort() aufgerufen wird, während eines Uploads.Meine Frage nun:
Wie kann diese ErrorMessage "Socket send aborted" abfangen?
Ich habe im FAQ einen ähnlichen Beitrag gefunden zur TClient/TServerSocket Komponenten, habe jedoch nicht geschafft den Quelltext für die NMFTP Komponente zu modifizieren.Kann mir da jemand helfen?
-
Vermutlich mußt Du im ::OnError-Ereignis die Fehlernummer zurücksetzen. Zumindest ist es bei den Indy-Komponenten so...
-
Hallo,
Der Parameter ErrNo gibt die numerische Darstellung des eingetretenenFehlers wieder, und der Parameter ErrMsg ist die Fehlermeldung, die mit der Fehlernummer verbunden ist.Ich habe es schon versucht: ErrNo = 0;
Leider ist dadurch keine Veränderung eingetreten
Ich habe es auch mit Errmsg = 0; versucht.
Die Fehlereldung kommt trotzdem.Der Header des OnError ClientSocket-Ereignissaufruf und NMFTP-Ereignissaufruf
unterscheiden sich auch.void __fastcall TFormMain::NMFTP1Error(TComponent *Sender, WORD Errno, AnsiString Errmsg) void__fastcall TFormMain::ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)Trotzdem Danke Joe_M.
Wenn jemand noch eine Idee hat, würde ich mich sehr freuen.
-
Hab noch ne Idee, respektive Frage: Bekommst Du die Fehlermeldung auch, wenn Du das Projekt 'Endgültig' kompilierst und außerhalb der IDE startest?
(Alternativ kannst Du unter Tools -> Debugger-Optionen, Reiter 'Sprach-Exceptions' die Häkchen bei 'Bei Delphi-Exception stoppen' und 'Bei C++ Exception stoppen' entfernen. Das sollte den gleichen Effekt haben.)
-
Hallo,
ich habe meine Problem halbwegs gelöst. Ich habe try und catch in mehreren Bereichen meiner Uploadroutine eingebaut. Die Fehlermeldung ist nun weg.Nun ist mir folgendes Aufgefallen
Programm stürzt ab bei folgene Aufruf hintereinander (während eines Uploads):NMFTP1->Abort(); NMFTP1->Disconnect();Programm stürzt aber nicht ab, wenn ich NMFTP1->Abort(); und NMFTP1->Disconnect();
jeweils in zwei verschiedene Buttonfunktionen packe und nacheinander die Button klicke.
Button1:NMFTP1->Abort();Button2
NMFTP1->Disconnect();Woran liegt das?
Wie kann ich es lösen, dass ich nur mit einem Button den Upload abbrechen und danach die Verbindung trennen kann?Habe es auch schon mit Sleep(2000); versucht, leider kein Erfolg.
-
Versuch's mal mit Cancel() statt Abort+Disconnect.
Ansonsten kann ich nur noch mal auf den schlechten Ruf der FTP-Komponente hinweisen.