因此,我正在尝试将二进制文件复制到特定位置...停止...执行一些操作,然后将其余内容从原始二进制文件复制到我的新二进制文件中。但是,当我执行第二次读取操作时,我的读取缓冲区为空。有人可以指出我在做什么错吗?非常感谢...
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();
答案 0 :(得分:2)
您以fin.seekg(0, fin.end);
到文件的末尾,但是在尝试read()
之前,您从不找回读取位置,因此您没有读取任何内容。在您seekg
之前,您还需要另一个read()
通话,以便回到原来的位置。添加
fin.seekg(currentPosition, fin.beg);
会让您回到原来的状态。
您也对
有误streamoff length = fin.tellg();
这将为您提供文件的总大小。要获得剩下的东西,您需要
streamoff length = fin.tellg() - currentPosition;