我知道我可以用操作员检查成功的文件打开!和成员函数std :: fstream class的fail()。
但是我可以为此目的使用成员函数bad()吗?是否符合标准?
答案 0 :(得分:2)
ios::operator!
和ios::bad
不可互换。 operator!
检查是否有任何错误(与ios::fail
相同),而ios::bad
仅检查不可恢复的错误。
您需要检查的内容取决于您的使用案例,您需要了解其含义。
答案 1 :(得分:1)
函数bad()
为“不可恢复的错误”产生true
- 无论这意味着什么。基本上,只要某些内容因某种形式的格式错误而导致其他原因失败,就会设置bad()
。有趣的是,当文件缓冲区的open()
时,各种文件流类std::ofstream
的{{1}}函数(std::ifstream
,std::fstream
和std::ios_base::failbit
)都设置为open()
失败了!也就是说,您无法使用stream.bad()
来测试open()
是否失败。您可以使用stream.fail()
。就个人而言,我不会打扰并使用转换为bool
:
std::ofstream out("file");
if (out) {
process();
}
else {
report_error();
}
答案 2 :(得分:-1)
是的,你可以,ios::bad()
返回boolean
,!
只会否定boolean
(即true
- > {{1反之亦然)。
这是否是你打算要做的事情是一个不同的问题。 false
检查流的完整性是否丢失,而不是打开失败。