2012-04-26 72 views
7

は故意に私は、ファイルに書き込むこの方法を抱えているので、私は、私は閉じられたファイルの中に書いているpossiblityの例外扱いしてみました:ofstreamの例外

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

しかし、どうやらSTDを: :私は故意に既に閉じられたファイルでこのメソッドを使用しようとしましたが、私の "例外!!"コメントは生成されなかったので、例外は閉じたファイルエラーの適切な例外ではありません。

どうすればいいですか?

答えて

12

Streamsはデフォルトで例外をスローしませんが、関数呼び出しfile.exceptions(~goodbit)で例外をスローするように指定できます。

代わりに、エラーを検出するための通常の方法は、ストリームの状態を確認することです:

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

この理由は、不正な読み取りがマイナーな問題ではなく、主要である多くの一般的な状況があるということです1:

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

ライブ、それを参照してください:をに比べ

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 

タイプios_base::failure

+0

私は例外処理に慣れようとしましたが、「ストリームは例外をスローしません」ということを知ってよかったです。ありがとう – Glolita

4

例外は、しかし、あなたはデフォルトの動作は、エラーを示すために設定された例外または他の唯一の内部状態フラグを生成するios::exceptionsで適切なフラグを設定している必要があることに注意してくださいストリームのために。