首页 > 解决方案 > 何时准确检查 std::ifstream::good()?

问题描述

假设我有一个代码来计算文件的大小:

std::ifstream ifs(path, std::ifstream::ate | std::ifstream::binary);
unsigned int size = ifs.tellg();
ifs.close();

大多数时候在 C++ 中,在哪里/何时与 call 相关ifs.good()

就我而言,创建流之后还是调用之后更好tellg()

那么,如果good()返回false,我应该明确关闭流吗?

标签: c++streamstdifstream

解决方案


您永远不需要明确关闭流的点开始,good()是一个函数:

检查流的状态是否良好

如果没有设置流的错误状态标志(eofbit、failbit 和 badbit),则返回 true。

您可以调用它来验证某些事情是否进展顺利,然后验证其他位以检查问题所在。例如 :

  • 输入操作达到文件结尾 (eofbit)

  • i/o 操作的逻辑错误(故障位)

  • i/o 操作上的读/写错误 (badbit)

但是,在手动关闭流时调用好思考是没有用的。

就我而言,是在创建流之后还是在调用tellg() 之后更好?

在我看来,在这种情况下你不需要调用good(),但如果你想调用它,最好tellg()在它的执行中设置一些失败。


推荐阅读