C ++:FStream认为它已达到二进制文件

时间:2016-02-17 17:31:58

标签: c++ binary fstream eof

我正在尝试使用以下格式读取二进制文件:

-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兆字节,我有点不知道为什么它在这里停止阅读。

1 个答案:

答案 0 :(得分:4)

要将文件作为二进制文件读取,您应该将binary添加到文件模式:

bbrFile.open(inFilename, ios::binary);

否则它将被读取为文本文件,并且某些代码可以被解释为文件结束标记。