停止并开始对二进制文件进行读取/复制

时间:2018-08-23 14:59:34

标签: c++ io binary

因此,我正在尝试将二进制文件复制到特定位置...停止...执行一些操作,然后将其余内容从原始二进制文件复制到我的新二进制文件中。但是,当我执行第二次读取操作时,我的读取缓冲区为空。有人可以指出我在做什么错吗?非常感谢...

ifstream fin;
fin.open(argv[1], ios::in | ios::binary);

ofstream fout("test.bin", ios::out | ios::binary);

int position = getPositionX();
fin.seekg(position);
streamoff initialCopyLength = fin.tellg();
char * readBuffer = new char[initialCopyLength];
fin.seekg(0, fin.beg);
fin.read(readBuffer, initialCopyLength);
fout.write(readBuffer, initialCopyLength);

///perform some operations, then copy out the rest of the binary

int currentPosition = fin.tellg();
fin.seekg(0, fin.end);
streamoff length = fin.tellg();
readBuffer = new char[length];
fin.read(readBuffer, length);
//write out last part of file
fout.write(readBuffer, length);
fin.close();
fout.close();

1 个答案:

答案 0 :(得分:2)

您以fin.seekg(0, fin.end);到文件的末尾,但是在尝试read()之前,您从不找回读取位置,因此您没有读取任何内容。在您seekg之前,您还需要另一个read()通话,以便回到原来的位置。添加

fin.seekg(currentPosition, fin.beg);

会让您回到原来的状态。

您也对

有误
streamoff length = fin.tellg();

这将为您提供文件的总大小。要获得剩下的东西,您需要

streamoff length = fin.tellg() - currentPosition;