none
Try Catch Fehler in Logdatei oder Messagebox ausgeben RRS feed

  • Frage

  • Hallo, ich habe eine try catch anweisung und möchte bi einem möglichen Fehlerfall den Fehler in eine Logdatei schreiben und in einer Messagebox wiedereben. im moment steht bei mir nur ein throw in der catch anweisung und der debugger springt dan dort hin. wie bekomme ich denn den Text der dann bei throw als Fehler angezeigt wird in die Messagebox?
    Freitag, 15. Oktober 2010 15:46

Antworten

  • Hallo,

    also erstens habe ich dir da eben einen falschen Link gegeben :) hier der Link zu dem C# Teil

    http://openbook.galileocomputing.de/visual_csharp_2010/visual_csharp_2010_09_001.htm#mjd3807a0ca6fc494c35f7ff46031e310e

    Und zu deiner Frage, du kannst einfach nach der "Exception" catchen also

    try{

    ...

    }catch(Exception ex){

    MessageBox.Show(ex.Message);

    }

    Nun wird wirklich jede Exception abgefangen, die in dem Try Block ausgelößt wird.


    MfG, Sebastian Gross
    Freitag, 15. Oktober 2010 17:56
  • Bekomme ich auch irgendwo gesagt, welche Exception was macht?

    Also ich haben jetzt die FileNotFoundException benutzt um rauszufinden ob die zu öffnende Datei existiert.

     

    Allerdings funktioniert das nicht, wenn ich ein Falschs Verzeichnis eingebe.

    da bekomme ich vom Debugger immer die Meldung: 

    "Ein Teil des Pfades "C:\Dokumente und Einstellungen\Benny\Eigense Dateien\Visual Studio 2008\Projects\Arnold PLC modus activation program\Arnold PLC modus activation program\bin\Release\activation.xml" konnte nicht gefunden werden."

     

    kann mir jemand sagen, wie ich disen Fehler abfangen kann?

    Hallo Bensen,

    Du kannst auch mehrer Exceptions abfangen:

    try
    {
    	StreamReader sr = File.OpenText( "C:\\Temp\\Test.txt" );
    	string s = sr.ReadToEnd();
    	sr.Close();
    	MessageBox.Show( s );
    }
    catch (OutOfMemoryException ex)
    {
    	MessageBox.Show( "Nicht genug Speicher, um die Datei vollständig zu lesen." );
    }
    catch (FileNotFoundException ex)
    {
    	MessageBox.Show( "Die Datei wurde nicht gefunden." );
    }
    catch (UnauthorizedAccessException ex)
    {
    	MessageBox.Show( "Keine Zugriffsberechtigung" );
    }
    catch (Exception ex)
    {
    	MessageBox.Show( "Sonstiger Fehler: " + ex.Message );
    }
    

    Wichtig hierbei ist, dass Du den catch-Teil für eine (Basis-)Exception ans Ende stellst. Denn jede andere Exception ist von dieser Klasse abgeleitet, im Sinne von "is a" ist also jede abgeleitete Exception eine Basis-Exception. Wenn diese dann mittels eines catch-Blocks abgefangen wird, können andere catch-Blöcke sie nicht mehr fangen. Genauen Aufschluss über die Vererbungshierarchie von Exceptions gibt Dir die MSDN-Library.

     

    Welche Exceptions die von Dir benutzten Methoden werfen KÖNNEN, steht meist in der Doku. (Im Fall von File.Open sind es noch einige mehr.)

    HTH

    Gruß
    Batty

    Mittwoch, 20. Oktober 2010 06:10

Alle Antworten

  • Hallo,

    du solltest wirklich ein Buch lesen wo die Grundlagen erklärt werden. Schau dir dieses Kapitel des Openbooks zu VB 2010 an dort wird die Fehlerbehandlung genau erklärt.

    http://openbook.galileocomputing.de/einstieg_vb_2010/einstieg_vb_2010_kap_03_003.htm

     


    MfG, Sebastian Gross
    Freitag, 15. Oktober 2010 16:57
  • Ja sorry, aber mache nur ab und zu was mit c#, da vergisst man es so schnell wieder ;-)
    Freitag, 15. Oktober 2010 17:12
  • Bekomme ich auch irgendwo gesagt, welche Exception was macht?

    Also ich haben jetzt die FileNotFoundException benutzt um rauszufinden ob die zu öffnende Datei existiert.

     

    Allerdings funktioniert das nicht, wenn ich ein Falschs Verzeichnis eingebe.

    da bekomme ich vom Debugger immer die Meldung: 

    "Ein Teil des Pfades "C:\Dokumente und Einstellungen\Benny\Eigense Dateien\Visual Studio 2008\Projects\Arnold PLC modus activation program\Arnold PLC modus activation program\bin\Release\activation.xml" konnte nicht gefunden werden."

     

    kann mir jemand sagen, wie ich disen Fehler abfangen kann?

    Freitag, 15. Oktober 2010 17:46
  • Hallo,

    also erstens habe ich dir da eben einen falschen Link gegeben :) hier der Link zu dem C# Teil

    http://openbook.galileocomputing.de/visual_csharp_2010/visual_csharp_2010_09_001.htm#mjd3807a0ca6fc494c35f7ff46031e310e

    Und zu deiner Frage, du kannst einfach nach der "Exception" catchen also

    try{

    ...

    }catch(Exception ex){

    MessageBox.Show(ex.Message);

    }

    Nun wird wirklich jede Exception abgefangen, die in dem Try Block ausgelößt wird.


    MfG, Sebastian Gross
    Freitag, 15. Oktober 2010 17:56
  • Bekomme ich auch irgendwo gesagt, welche Exception was macht?

    Also ich haben jetzt die FileNotFoundException benutzt um rauszufinden ob die zu öffnende Datei existiert.

     

    Allerdings funktioniert das nicht, wenn ich ein Falschs Verzeichnis eingebe.

    da bekomme ich vom Debugger immer die Meldung: 

    "Ein Teil des Pfades "C:\Dokumente und Einstellungen\Benny\Eigense Dateien\Visual Studio 2008\Projects\Arnold PLC modus activation program\Arnold PLC modus activation program\bin\Release\activation.xml" konnte nicht gefunden werden."

     

    kann mir jemand sagen, wie ich disen Fehler abfangen kann?

    Hallo Bensen,

    Du kannst auch mehrer Exceptions abfangen:

    try
    {
    	StreamReader sr = File.OpenText( "C:\\Temp\\Test.txt" );
    	string s = sr.ReadToEnd();
    	sr.Close();
    	MessageBox.Show( s );
    }
    catch (OutOfMemoryException ex)
    {
    	MessageBox.Show( "Nicht genug Speicher, um die Datei vollständig zu lesen." );
    }
    catch (FileNotFoundException ex)
    {
    	MessageBox.Show( "Die Datei wurde nicht gefunden." );
    }
    catch (UnauthorizedAccessException ex)
    {
    	MessageBox.Show( "Keine Zugriffsberechtigung" );
    }
    catch (Exception ex)
    {
    	MessageBox.Show( "Sonstiger Fehler: " + ex.Message );
    }
    

    Wichtig hierbei ist, dass Du den catch-Teil für eine (Basis-)Exception ans Ende stellst. Denn jede andere Exception ist von dieser Klasse abgeleitet, im Sinne von "is a" ist also jede abgeleitete Exception eine Basis-Exception. Wenn diese dann mittels eines catch-Blocks abgefangen wird, können andere catch-Blöcke sie nicht mehr fangen. Genauen Aufschluss über die Vererbungshierarchie von Exceptions gibt Dir die MSDN-Library.

     

    Welche Exceptions die von Dir benutzten Methoden werfen KÖNNEN, steht meist in der Doku. (Im Fall von File.Open sind es noch einige mehr.)

    HTH

    Gruß
    Batty

    Mittwoch, 20. Oktober 2010 06:10