exceptions behandeln



  • ich versuch schon seit tagen einen kapaplen exception zu werfen wenn eine datei nicht vorhanden ist. ich hab bis jetzt folgendes:

    try
      {
       printf("trying\n");
       throw (fopen(filename,"rt"));
       printf("loaded file\n");
      }
      catch ( ... )
      {
      	printf("not loaded file\n");
      	return false;
      }
    

    das funtzt aber net. denn wenn die datei existiert, heisst es trotzdem dass es die datei nicht gefunden hat. was ist falsch.



  • Du solltest throw nur dann aufrufen, wenn fopen fehlschlägt.



  • Wenn deine Fehlerbehandlung nur daraus besteht, false zurückzugeben, kannst du dir die Exception eigentlich auch sparen ... Und übrigens, den Modus "rt" gibt es nicht, lesen im Textmodus schreibt man "r".



  • @MFK
    ich weiss ja nicht ob die datei exisitiert oder nicht, drum weiss ich ja auch nicht ob ein throw setzten kann oder nicht.

    @Bashar
    Dann endet das Programm mit "Speicherzugriffsfehler". Wenns wirklich so einfach ginge hätt ichs auch selber hingekriegt.



  • teal schrieb:

    @Bashar
    Dann endet das Programm mit "Speicherzugriffsfehler". Wenns wirklich so einfach ginge hätt ichs auch selber hingekriegt.

    Wenn das:

    FILE * f = fopen(filename, "r");
    if (!f) return false;
    

    einen Speicherzugriffsfehler verursacht, hast du wohl noch woanders nen Fehler. Ich weiß nicht, welche verschlungenen Gedankenpfade dich auf deinen hier gepostetet Code geführt haben, aber um uns weitere fruchtlose Diskussionen zu ersparen, hier wie es funktioniert.

    class MyException { ... };
    // ...
    FILE *f;
    try {
      f = fopen(filename, "r");
      if (!f) 
        throw MyException();
    } catch(MyException&) {
      return false;
    }
    


  • ich habs mittlerweile auch gelöst. jetzt gibts komischerweise keinen speicherzugriffsfehler mehr, obwohl ich sonst keine Zeile Quellcode geändert habe.


Anmelden zum Antworten