c++ - 何时准确检查 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
,我应该明确关闭流吗?
解决方案
从您永远不需要明确关闭流的点开始,good()
是一个函数:
检查流的状态是否良好
如果没有设置流的错误状态标志(eofbit、failbit 和 badbit),则返回 true。
您可以调用它来验证某些事情是否进展顺利,然后验证其他位以检查问题所在。例如 :
输入操作达到文件结尾 (eofbit)
i/o 操作的逻辑错误(故障位)
i/o 操作上的读/写错误 (badbit)
但是,在手动关闭流时调用好思考是没有用的。
就我而言,是在创建流之后还是在调用tellg() 之后更好?
在我看来,在这种情况下你不需要调用good()
,但如果你想调用它,最好tellg()
在它的执行中设置一些失败。
推荐阅读
- ruby - 是否有一种算法可以从给定的大于 1 的加数范围中找到总和的所有加数组合?
- c - 保存文件的问题
- javascript - 将 Canvas 应用到我的 Vue.js 项目时出错
- php - 如果我有像 facebook 和 google 这样的社交登录,我应该让数据库中的电子邮件不唯一吗?
- python - pythonanywhere corsheaders 模块未找到错误
- visual-studio-code - VS代码。无法连接到扩展市场
- python-3.x - 使用名称取消异步任务
- visual-studio-code - 点总是替换 vs-code 中第一次打开的文件
- f# - 在 F# 中,如何使用列表索引更新/替换嵌套记录?
- python - 传递给 C++ .dll 的 Ctypes 参数打印出垃圾值