c ++ eof和failbit在读取二进制文件的过程中

时间:2014-04-09 17:44:26

标签: c++ io

我在阅读二进制文件时遇到了麻烦。它似乎没有读到它的结尾:

// get file size
ifs.open (inFile.c_str(), ios::binary | ios::ate);
cout << "file size:  " << ifs.tellg() << endl;;
ifs.close();

// read file
ifs.open (inFile.c_str(), ios::in | ios::binary);
int counter = 0;
char c = 0;
for (counter = 0; ifs; ++counter)
    ifs >> c;

cout << "last char:  " << int(c) << endl;
cout << "read bytes: " << counter << endl;
cout << "fail? " << (ifs.fail() ? "yes" : "no") << endl;
cout << "bad?  " << (ifs.bad() ? "yes" : "no") << endl;
cout << "eof?  " << (ifs.eof() ? "yes" : "no") << endl;
ifs.close();

以下是输出。我不明白为什么我在文件中间得到eofbit以及为什么它与failbit一起出现:

file size:  289384
last char:  1
read bytes: 288598
fail? yes
bad?  no
eof?  yes

我在Unix系统上得到了

1 个答案:

答案 0 :(得分:2)

我做了一个测试并发现了问题。将ofs << c添加到for循环后,这很明显。

它不是在阅读白色空间。

您可以通过添加#include <iomanip>ifs >> noskipws,或使用二进制输入函数(如ifs.get(c)

来解决此问题