c++ - “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 行而不读取整个文件。
解决方案
对于二进制文件,您不应该使用>>
它,因为它会跳过空格并且可能会修改行尾。
我建议使用read()
. 您可以定义一个包含您需要的数据的向量。
fin.read(reinterpret_cast<char*>(buffer.data()), buffer.size());
推荐阅读
- java - 如何修复“org.springframework.dao.EmptyResultDataAccessException:不正确的结果大小:预期 1,实际 0”错误
- vue.js - vue.config.js 中的端口被忽略
- ignite - JVM 暂停时间可能过长
- regex - Coldfusion 替换函数或右函数返回一个空格
- mysql - 无法从 Mysql 中删除一行 Not metadata-lock
- mysql - MySQL 存储过程插入验证
- c++ - 编译时检查变量是否有符号/无符号
- firebase - 无法将 Firebase 与我的应用程序集成
- reactjs - Redux 更新错误状态,将之前设置的状态设置为 null
- python - 导入 pyplot 模块并调用 pyplot,plot() 但未将返回值存储到任何变量。但是调用 pyplot.show() 函数?