2012-04-26 8 views
7

Absichtlich habe ich diese Methode, die in eine Datei schreibt, also habe ich versucht, die Ausnahme von der Möglichkeit zu handhaben, dass ich in eine geschlossene Datei zu schreiben:ofstream Ausnahmebehandlung

void printMe(ofstream& file) 
{ 
     try 
     { 
      file << "\t"+m_Type+"\t"+m_Id";"+"\n"; 
     } 
     catch (std::exception &e) 
     { 
      cout << "exception !! " << endl ; 
     } 
}; 

Aber anscheinend std: : Ausnahme ist nicht die geeignete Ausnahme für einen geschlossenen Dateifehler, weil ich absichtlich versucht habe, diese Methode für eine bereits geschlossene Datei zu verwenden, aber mein "Ausnahme !!" - Kommentar wurde nicht generiert.

Also welche Ausnahme sollte ich geschrieben haben ??

Antwort

12

Streams werfen keine Ausnahmen standardmäßig, aber Sie können ihnen sagen, Ausnahmen mit dem Funktionsaufruf file.exceptions(~goodbit) zu werfen.

Stattdessen der normale Weg, Fehler zu erkennen ist einfach der Strom des Staates zu überprüfen:

if (!file) 
    cout << "error!! " << endl ; 

Der Grund dafür ist, dass es viele gemeinsame Situationen, in denen eine ungültige Lese ein kleineres Problem ist, kein großes ein:

while(std::cin >> input) { 
    std::cout << input << '\n'; 
} //read until there's no more input, or an invalid input is found 
// when the read fails, that's usually not an error, we simply continue 

im Vergleich zu:

for(;;) { 
    try { 
     std::cin >> input; 
     std::cout << input << '\n'; 
    } catch(...) { 
     break; 
    } 
} 

es Siehe Live: http://ideone.com/uWgfwj

+0

Nun, ich wurde nur versucht, an die Ausnahmebehandlung zu gewöhnen, aber es ist gut zu wissen, dass "Streams keine Ausnahmen standardmäßig auslösen", vielen Dank – Glolita

4

Ausnahme des Typs ios_base::failure, beachten Sie jedoch, dass Sie mit ios::exceptions, um die Ausnahmen zu erzeugen oder auch nur interne Zustandsflags das entsprechende Flag gesetzt haben sollte, wird zur Anzeige der Fehler eingestellt werden, die das Standardverhalten für Ströme.