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::ofstreamstd::ifstream设置std::fstream了!也就是说,您不能用于测试是否失败。您可以使用. 就个人而言,我不会打扰并使用转换为:std::ios_base::failbitopen()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 回答