我在阅读二进制文件时遇到了麻烦。它似乎没有读到它的结尾:
// 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系统上得到了
答案 0 :(得分:2)
我做了一个测试并发现了问题。将ofs << c
添加到for循环后,这很明显。
它不是在阅读白色空间。
您可以通过添加#include <iomanip>
和ifs >> noskipws
,或使用二进制输入函数(如ifs.get(c)