サヴィッチの定理を読むC++での問題解決、std::ifstream::fail
は、ファイルが正しく開かれたかどうかを確認するための例として示されています(ifstream
またはofstream
)。
私が最初に示したものなので、以前に使用しました。std::ifstream::is_open
同じチェックを実行します。
「より良い」実践はどれですか?
または、どちらかを開こうとした直後に呼び出された場合、実際的な違いはありませんか?
_std::ifstream::fail
_には_std::ifstream::is_open
_のチェックが含まれますが、_std::ifstream::is_open
_はファイルへのハンドルを作成できたかどうかのみをチェックします。
_std::ifstream::fail
_がtrue;を返した場合でも、_std::ifstream::is_open
_はtrueを返すことができます。それらは相互に排他的ではありません。
_.fail
_は、ストリームの全体的な "health"をチェックします。これには、ストリームが現在失敗状態に入っていることのチェックなどが含まれます無効な値を読み取ろうとするのに対し、_.is_open
_はストリームが現在ファイルに添付されているかどうかのみをチェックしますが、_.is_open
_はストリームが失敗状態かどうか。
これは確かにあなたが達成しようとしていることに依存します。
通常は、 explicit operator bool ()
を使用して、ストリームの読み取り/書き込みの準備ができているかどうかを確認することをお勧めします。これには、ストリームの全体的な状態のチェックが含まれます。
_some_stream
_で別の読み取り/書き込み操作を行うことはできますか?
_if (some_stream) {
// stream is alive and well
} else {
// something is wrong
}
_
一部のfstreamが実際にファイルに添付されているかどうかを明示的に確認したい場合は、_is_open
_を使用し、全体的な状態を確認したい場合は、 _.fail
_を使用するか、ストリームがbool
に変換可能であるという事実に依存します。
代わりにbool
変換演算子を使用してください!
ifstream i("test.txt");
if (i) {
//success
}
またはそれ以上:
ifstream i("test.txt");
if (!i) {
//failure, handle error
}