我正在尝试使用以下格式读取二进制文件:
-64位整数
-3276 32位浮点数
- (重复最后2行直到eof)
这是我解释文件的块:
ifstream bbrFile;
ofstream csvFile;
bbrFile.open(inFilename);
csvFile.open(dataFilename);
//yes I did actually check to make sure that the files had opened.
//I omitted it here for brevity
long long int time;
float point;
while (bbrFile)
{
bbrFile.read((char*)&time, sizeof(time));
csvFile << time;
for (int i = 0; i < 3276; i++) {
bbrFile.read((char*)&point, sizeof(point));
csvFile << ',' << point;
}
csvFile << "\n";
}
到目前为止,我的代码工作正常,除了它在读取大约53个浮点数后认为它已到达文件末尾,然后只输出它读取的最后一个浮点数,直到'for'循环结束。我尝试使用fread和FILE *而不是read和fstream,并得到了相同的结果。我也试过替换
while (bbrFile)
与
while (!bbrFile.eof())
无济于事。
由于二进制文件大约是12兆字节,我有点不知道为什么它在这里停止阅读。
答案 0 :(得分:4)
要将文件作为二进制文件读取,您应该将binary
添加到文件模式:
bbrFile.open(inFilename, ios::binary);
否则它将被读取为文本文件,并且某些代码可以被解释为文件结束标记。