1

オペレーターでファイルのオープンが成功したことを確認できることを知っています! std::fstream クラスのメンバー関数 fail() 。

しかし、この目的のためにメンバー関数bad()も使用できますか? 規格に適合しているかどうか

4

3 に答える 3

2

ios::operator!交換可能ではありios::badません。operator!はすべてのエラー ( と同じios::fail) をios::badチェックしますが、回復不可能なエラーのみをチェックします。

それぞれのドキュメントをこちらこちらで参照してください。

何を確認する必要があるかは、ユースケースによって異なり、その意味を理解する必要があります。

于 2012-10-03T20:15:53.377 に答える
1

この関数は、「回復不能なエラー」をbad()生成します-それが意味するものは何でも。true基本的に、bad()何らかの形式のフォーマットエラーとは異なる理由で何かが失敗するたびに設定されます。興味深いことに、open()さまざまなファイルストリームクラス(、、、および)の機能はstd::ofstreamすべてstd::ifstreamstd::fstreamファイルstd::ios_base::failbitバッファに障害が発生したときに設定されopen()ます。つまりstream.bad()、失敗したかどうかをテストするために使用することはできませopen()ん。を使用できますstream.fail()。個人的には、私はわざわざ変換を使用しませんbool

std::ofstream out("file");
if (out) {
    process();
}
else {
    report_error();
}
于 2012-10-03T20:24:54.180 に答える
-1

はい、できios::bad()ます。 a を返し、boolean単に!否定しますboolean(つまり、true->falseおよびその逆)。

それがあなたが意図していることかどうかは別の問題です。bad()オープンの失敗ではなく、ストリームの完全性の喪失をチェックします。

于 2012-10-03T20:13:24.667 に答える