我有一个简单的C++文件读取程序:
int main() {
std::string buf;
std::ifstream file;
file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
try {
file.open("C:\\Test11.txt");
char c;
while (!(file.eof())) {
file.get(c);
std::cout << c;
}
}
catch (std::ifstream::failure e) {
std::cout << e.what() << std::endl;
std::cout << e.code() << std::endl;
std::cout << "Exception opening/reading file";
}
file.close();
return 0;
}
C:\Test11.txt
处的文件内容为Hello
。
程序能够读取内容,但失败,出现异常ios_base::failbit
。在评估while (!(file.eof()))
时似乎有问题。
出了什么问题?
1条答案
按热度按时间qacovj5a1#
问题是
eof()
不为真,直到您尝试读取超过文件结尾。因此,一旦你正确读取了整个文件,并且文件中没有留下任何数据,
eof()
的结果仍然是false(因为你还没有读过末尾)。下一次读取将设置eof()
,但也是下一次读取将失败(从而抛出异常)。这就是为什么检查
eof()
是一种反模式。更好(正确)的模式是: