c++从二进制文件中读取整数,缺少一些数据

标签 c++ file io binary

我使用以下方法将 100,000 个整数保存到二进制文件中:

    for(unsigned int i = 0; i < 100000; i++){
        temp = generateRand(99999);
        file.write(reinterpret_cast<const char*>(&temp),sizeof(temp));
    }

从这个文件中,我试图读取整数,并将它们保存到一个 vector 中。

ifstream ifile;
ifile.open("test.bin",ios::binary);

ifile.seekg(0, ifile.end);
long size = ifile.tellg();
ifile.seekg(0, ifile.beg);

int restore = 0;
int count = 0;

while(ifile.tellg() < size){
    ifile.read(reinterpret_cast<char*>(&restore), sizeof(restore));
    v.push_back(restore);
    count++;
}

但是我似乎只能读取 99328 个整数,而不是 100000。我对二进制文件的读/写比较陌生,所以你们能帮帮我吗?

最佳答案

看起来 file 对象在读取开始时仍处于打开状态,这导致了所描述的行为。

尝试调用 file.close() 来刷新缓冲区,然后才初始化 ifile

同时你会发现一次读取整个 vector 可以大大加快这个过程。

关于c++从二进制文件中读取整数,缺少一些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42468440/

相关文章:

java - 什么情况下关闭流会失败?

c - 用空格写入二进制文件 C 编程

php - FB如何创建FBML?

python - 如何使用python获取目录中的文件名

java - 如何按编号排列和重命名文件?

c++ - 在 C++ 中按行读取大文件

Java 进程/IO 执行挂起

c++ - 在winsock中将 vector 重用为数组的更有效方法?

c++ - gSoap,c++,如何在客户端应用程序中传递 soapStub 声明的参数

c++ - 空序列的算术平均值是多少?