c ++从二进制文件读取整数,丢失一些数据

时间:2017-02-26 12:24:12

标签: 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));
    }

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

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个。我对二进制文件的读/写相对较新,所以你们可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

这对我有用。您可能忘记使用$search标志或关闭流?

ios::binary

答案 1 :(得分:2)

当阅读开始时,file对象看起来仍然打开,这导致所描述的行为。

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

你也会发现一次读取整个矢量可以大大加快这个过程。