成员函数 bad() 的 std::ftsream 用于检查

member function bad() of std::ftsream for checking

本文关键字:ftsream 用于 检查 std 函数 bad 成员      更新时间:2023-10-16

我知道我可以用运算符检查文件打开成功!和std::fstream类的成员函数fail()。

但是我可以为此目的使用成员函数 bad() 吗?是否符合标准?

ios::operator!ios::bad不可互换。 operator!检查是否有任何错误(与ios::fail相同),而ios::bad只检查不可恢复的错误。

在此处和此处查看其各自的文档。

您需要检查的内容实际上取决于您的用例,您需要了解其含义。

函数bad()为"不可恢复的错误"生成true - 无论这意味着什么。基本上,每当某些内容由于某种形式的格式错误不同的原因而失败时,就会设置bad()。有趣的是,各种文件流类(std::ofstreamstd::ifstreamstd::fstream)的open()函数都设置std::ios_base::failbit文件缓冲区的open()失败!也就是说,不能使用 stream.bad() 来测试open()是否失败。您可以使用stream.fail() .就个人而言,我不会打扰并使用转换为bool

std::ofstream out("file");
if (out) {
    process();
}
else {
    report_error();
}

是的,你可以,ios::bad()返回一个boolean!将简单地否定boolean(即true -> false反之亦然)。

这是否是你打算做的是一个不同的问题。 bad()检查流是否失去完整性,而不是无法打开。