首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ifstream::is_open与ifstream::失败?

ifstream::is_open与ifstream::失败?
EN

Stack Overflow用户
提问于 2014-06-07 13:12:03
回答 2查看 15.4K关注 0票数 30

在C++中阅读Savitch的问题解决方案,std::ifstream::fail是一个示例,用于检查文件是否已正确打开(ifstreamofstream)。

正如我第一次看到的那样,我以前使用过std::ifstream::is_open来执行相同的检查。

哪个是“更好”的练习?

或者在任何一个尝试打开后被直接调用的情况下,这会不会产生实际的影响?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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上再做一次读写操作吗?

代码语言:javascript
复制
if (some_stream) {
  // stream is alive and well
} else {
  // something is wrong
}

如果您显式地希望查看某个fstream是否实际附加到一个文件,那么使用is_open,如果您想检查总体运行情况;使用.fail或者依赖于流可以转换到bool这一事实。

票数 33
EN

Stack Overflow用户

发布于 2014-06-07 13:13:14

使用bool转换操作符代替!

代码语言:javascript
复制
ifstream i("test.txt");
if (i) {
    //success
}

或更好:

代码语言:javascript
复制
ifstream i("test.txt");
if (!i) {
    //failure, handle error
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24097580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档