NMFTP - Überprüfen ob gerade Dateien übertragen werden



  • 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.


Anmelden zum Antworten