代码之家  ›  专栏  ›  技术社区  ›  Setix

停止和启动二进制文件的读取/复制

  •  -1
  • Setix  · 技术社区  · 6 年前

    所以我试图将二进制文件复制到某个点…停止…执行一些操作,然后将剩余内容从原始二进制文件复制到新二进制文件。但是,当我执行第二次读取操作时,我的读取缓冲区是空的。有人能指出我做错了什么吗?非常感谢。。。

    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 回复  |  直到 6 年前
        1
  •  2
  •   NathanOliver    6 年前

    fin.seekg(0, fin.end); 但在你试图 read() 所以你最后什么也没读。你需要另一个 seekg 在你面前打电话 所以你回到原来的地方。添加

    fin.seekg(currentPosition, fin.beg);
    

    会让你回到原来的地方。

    streamoff length = fin.tellg();
    

    这是给你的总文件大小。为了得到你需要的东西

    streamoff length = fin.tellg() - currentPosition;