首页 > 后端开发 > C++ > 在 C 中读取文件流时如何正确测试文件结尾?

在 C 中读取文件流时如何正确测试文件结尾?

Linda Hamilton
发布: 2024-12-21 15:33:10
原创
697 人浏览过

How to Correctly Test for End-of-File When Reading from a File Stream in C  ?

测试流输入状态与未来的成功

使用流读取输入时,了解测试流状态和预测之间的区别至关重要未来运营的成功。

问题:阅读最后一行两次

ifstream f("x.txt");
string line;
while (f.good()) {
  getline(f, line);
  // Use line here.
}
登录后复制

在此代码中,最后一行被读取两次,因为 f.good() 测试当前流状态,而不是 getline() 是否成功。一旦 getline() 到达 EOF,f 仍处于“良好”状态,因此即使在读取最后一行后,循环仍会继续。

解决方案:操作后测试流

相反,在执行输入操作后检查流状态:

ifstream f("x.txt");
string line;
while (getline(f, line)) {
  // Use line here.
}
登录后复制

替代使用eof()

虽然不建议在循环条件中使用 eof(),但这里有一个使用 !f.eof() 的等效解决方案:

ifstream f("x.txt");
string line;
while (!f.eof()) {
  if (getline(f, line)) {
    // Use line here.
  } else {
    break;
  }
}
登录后复制

范围-基于所有行的循环

要读取和处理所有行,请使用基于范围的循环:

ifstream f("x.txt");
for (std::string line; getline(f, line);) {
  process(line);
}
登录后复制

Good 与 Stream State

请注意,f.good() 命名错误。它并不真正指示流的“良好”,而是当流不处于“失败”或“不良”状态时返回 true。在执行输入操作后始终测试流本身(即检查其反转的失败状态)以确保成功。

以上是在 C 中读取文件流时如何正确测试文件结尾?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板