Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi FTP Fehler Fenster nicht anzeigen (https://www.delphipraxis.net/161665-ftp-fehler-fenster-nicht-anzeigen.html)

Stread 14. Jul 2011 19:29

FTP Fehler Fenster nicht anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich realisiere über FTP einen Upload.
Wenn man nun keine Internetverbindung hat, oder per Firewall den Internetzugriff verhindert, kommt ein ziemlich häßliches Hinweisfenster.

Wie kann ich dieses Fenster (siehe Anhang) unterdrücken und die Nachricht stattdessen in ein Label ausgeben?

Hier mein (ziemlich einfacher) Code:
Delphi-Quellcode:
procedure TFormSys.BtFTPClick(Sender: TObject);
  begin
BtSpeichern.Click;
IdFTP1.Host:= '***';
IdFTP1.Port:= (21);
IdFTP1.Username:= '***';
IdFTP1.Password:= '***';
IdFTP1.Connect;
IdFTP1.Put(ExtractFilePath(ParamStr(0)) +'Systeminfos '+ GetUsername + '.txt',
    ExtractFileName('Systeminfos '+ GetUsername + '.txt'));
IdFTP1.Disconnect;
end;

s.h.a.r.k 14. Jul 2011 19:33

AW: FTP Fehler Fenster nicht anzeigen
 
Schau dir mal try-except und try-finally an :) Guckst du hier.
Delphi-Quellcode:
procedure TFormSys.BtFTPClick(Sender: TObject);
begin
  BtSpeichern.Click;
  IdFTP1.Host:= '***';
  IdFTP1.Port:= (21);
  IdFTP1.Username:= '***';
  IdFTP1.Password:= '***';
  try
    IdFTP1.Connect;
  except
    on E : Exception do
    begin
      LabelError.Caption := 'Could not connect to server: ' + E.Message;
      Exit;
    end;
  end;
  try
    try
      IdFTP1.Put(ExtractFilePath(ParamStr(0)) +'Systeminfos '+ GetUsername + '.txt',
        ExtractFileName('Systeminfos '+ GetUsername + '.txt'));
    except
      on E : Exception do
      begin
        LabelError.Caption := 'Could not put data to server: ' + E.Message;
      end;
    end;
  finally
    IdFTP1.Disconnect;
  end;
end;

Bjoerk 14. Jul 2011 19:39

AW: FTP Fehler Fenster nicht anzeigen
 
Ich habe es bei mir so, bin aber nicht zu 100% sicher.

Delphi-Quellcode:
  try
    idftp1.Connect;
    try
      idftp1.Put(..
    except
      // putError
    end;
    idftp1.DisConnect;
  except
    // ConnectError
  end;
//Edit: Shark war schneller

s.h.a.r.k 14. Jul 2011 19:42

AW: FTP Fehler Fenster nicht anzeigen
 
Hatte noch einen Fehler oben, da ich das Exit beim ersten except-Block vergessen hatte.

Luckie 14. Jul 2011 20:08

AW: FTP Fehler Fenster nicht anzeigen
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1111784)
Schau dir mal try-except und try-finally an :) Guckst du hier.
Delphi-Quellcode:
procedure TFormSys.BtFTPClick(Sender: TObject);
begin
  BtSpeichern.Click;
  IdFTP1.Host:= '***';
  IdFTP1.Port:= (21);
  IdFTP1.Username:= '***';
  IdFTP1.Password:= '***';
  try
    IdFTP1.Connect;
  except
    on E : Exception do
    begin
      LabelError.Caption := 'Could not connect to server: ' + E.Message;
      Exit;
    end;
  end;
  try
    try
      IdFTP1.Put(ExtractFilePath(ParamStr(0)) +'Systeminfos '+ GetUsername + '.txt',
        ExtractFileName('Systeminfos '+ GetUsername + '.txt'));
    except
      on E : Exception do
      begin
        LabelError.Caption := 'Could not put data to server: ' + E.Message;
      end;
    end;
  finally
    IdFTP1.Disconnect;
  end;
end;

aua. Warum die verschachtelten try-except-Blöcke? Dazu nutzt man doch Exceptions, dass man genau so was nicht machen muss.

Delphi-Quellcode:
.. := Create(..);
try
  try
    Connect;
    Put;
  except
    on E: Exception do
     // Ausnahmefehler behandeln
  end;
finally
  ..Free;
end;

s.h.a.r.k 14. Jul 2011 21:29

AW: FTP Fehler Fenster nicht anzeigen
 
Zitat:

Zitat von Luckie (Beitrag 1111790)
aua. Warum die verschachtelten try-except-Blöcke? Dazu nutzt man doch Exceptions, dass man genau so was nicht machen muss.

Das hat den Grund, dass ich meist nicht so viel Vertrauen in *gute* Exception-Meldungen habe. Somit habe ich die Möglichkeit auf das jeweilige Problem genauer einzugehen. Ebenso muss ich dann nicht wissen, was für ein Typ von Exception den geworfen wird. Wenn man in deinem Exception-Block landet, dann weiß man nicht, ob man da gelandet ist, weil die Verbindung nicht aufgebaut werden konnte oder weil das Hochladen -- evtl. aufgrund fehlender Rechte -- nicht geklappt hat. Wobei sowas halt immer darauf ankommt, verstehe deine Aussage aber voll und ganz :wink:

Luckie 14. Jul 2011 21:45

AW: FTP Fehler Fenster nicht anzeigen
 
Wieso? Wenn die Verbindung nicht aufgebaut werden konnte, bekommst du eine Exception von der Connect-Methode mit entsprechender Fehlermeldung, wird die Exception von der Put-Methode geworfen bekommst du eine entsprechend von der Put-Methode mit zugehörigem Fehlertext. Du weißt also ganz genau wer warum eine Exception schmeißt. Und wenn du dir noch die Dokumentation anguckst, kannst du gezielt reagieren:
Delphi-Quellcode:
on E: EConnectError do
  ...;
on E: EPutError do
  ...;
on E: Exception do
  ...;

Luckie 14. Jul 2011 22:08

AW: FTP Fehler Fenster nicht anzeigen
 
Delphi-Quellcode:
procedure TForm16.FooBar;
begin
  try
    IdFTP1.Connect;
    IdFTP1.ChangeDir('html');
    IdFTP1.Put('D:\Computer\exclude.lst', 'exclude.lst');
  except
    on E: Exception do
      ShowMessage(E.ClassName);
  end;
end;
Und guckt dir mal an, was für unterschiedliche Exceptions geworfen werden. Auf die kannst du gezielt reagieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 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