1. ホーム
  2. c++

[解決済み] ifstream のオープンに失敗したときのエラーメッセージの出し方

2022-08-20 19:42:41

質問

ifstream f;
f.open(fileName);

if ( f.fail() )
{
    // I need error message here, like "File not found" etc. -
    // the reason of the failure
}

エラーメッセージを文字列で取得するには?

どのように解決するのですか?

失敗したシステムコールはすべて errno の値を更新します。

このように、より多くの情報を持つことができるようになります。 ifstream のようなものを使って、失敗したときの詳細な情報を得ることができます。

cerr << "Error: " << strerror(errno);


しかし それぞれ システムコールはグローバルな errno の値を更新するため、マルチスレッドアプリケーションでは f.open の実行と errno .

POSIX標準のシステムで。

<ブロッククオート

errnoはスレッドローカルであり、あるスレッドで設定しても他のスレッドでの値には影響しない。 を設定しても他のスレッドには影響しません。


編集 (コメントでArne Mertzや他の方々に感謝します)。

e.what() は、当初はよりC++的に正しい実装方法だと思われましたが、この関数が返す文字列は実装に依存し、(少なくともG++のlibstdc++では)この文字列はエラーの原因について有用な情報を持っていません...。