首页 > 解决方案 > “ifstream”没有读取整个文件

问题描述

我有一个文件说“file.dat”,它有大约 1300 行和 2 列数字数据。我想使用 ifstream 读取文件的内容。当我使用 ifstream 的对象来读取此文件时,它会截断前 400 行并显示最后 900 行。

我尝试将标志ios_base::binary放入 ifstream 对象的构造函数中,但问题仍然存在。我检查了数据文件,它显示了所有 1300 行。我确实有另一个 ifstream 对象,它正在从另一个文件中读取数据,但我使用不同的 ifstream 对象单独声明了它。代码有点长,但这就是它基本上在做的事情:

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    ifstream fin;
    fin.open("chi2_rse.dat", ios_base::in | ios::binary);

    double b;
    double chi2;

    while(fin >> b >> chi2){
        cout << b << "    " << chi2 << endl;
    }
}

我不明白为什么 ifstream 跳过前 400 行而不读取整个文件。

标签: c++

解决方案


对于二进制文件,您不应该使用>>它,因为它会跳过空格并且可能会修改行尾。

我建议使用read(). 您可以定义一个包含您需要的数据的向量。

fin.read(reinterpret_cast<char*>(buffer.data()), buffer.size());

推荐阅读