在C++中阅读Savitch的问题解决方案,std::ifstream::fail是一个示例,用于检查文件是否已正确打开(ifstream或ofstream)。
正如我第一次看到的那样,我以前使用过std::ifstream::is_open来执行相同的检查。
哪个是“更好”的练习?
或者在任何一个尝试打开后被直接调用的情况下,这会不会产生实际的影响?
发布于 2014-06-07 13:16:46
引言
std::ifstream::fail包括检查std::ifstream::is_open,但是std::ifstream::is_open只检查是否可以为文件创建句柄。
解释
std::ifstream::fail可以返回true,即使std::ifstream::is_open返回true;它们不是相互排斥的。
.fail将检查流的总体“健康状况”,包括检查流当前在试图读取无效值时进入失败状态,而.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这一事实。
发布于 2014-06-07 13:13:14
使用bool转换操作符代替!
ifstream i("test.txt");
if (i) {
//success
}或更好:
ifstream i("test.txt");
if (!i) {
//failure, handle error
}https://stackoverflow.com/questions/24097580
复制相似问题