C++ 如何将二进制文件的一部分复制到新文件?

C++ How To Copy Part of A Binary File To A New File?

我有一个很长的二进制文件作为函数的输入。我可以将所有数据复制到一个新文件,如下所示:

void copyBinaryFile(string file){
    const char* fileChar = file.c_str(); 

    ifstream input(fileChar, ios::binary);
    ofstream output("/home/my_name/result.img", ios::binary);

    copy(istreambuf_iterator<char>(input),
    istreambuf_iterator<char>(),
    ostreambuf_iterator<char>(output)
    );
}

这对于一次复制整个文件来说效果很好,但是,我真正想做的是从第一个二进制文件中取出几个不连续的块并将它们全部写入输出文件,即

for(int i = 0; i < chunkArray.size(); i++){
    //copy 512 bytes from file1 to file2 starting at the chunkArray[i]th character
}

我该怎么做?如果有任何不同,这是在 Linux 上。

看起来很简单..

让你的函数在它应该开始复制的源中取得一个偏移量,以及要复制的字节数。然后从给定的起点复制那么多字节。

  1. 使用ifstream::seekg移动文件的阅读位置
  2. 从文件中读取适当的字节数。
  3. 处理从文件中读取的数据。
  4. 重复直到完成。

for(int i = 0; i < chunkArray.size(); i++){
    //copy 512 bytes from file1 to file2 starting at the chunkArray[i]th character
   input.seekg(chunkArray[i]);
   char chunk[512];
   input.read(chunk, 512);

   // Deal with error, if there is one.
   if (!input )
   {
   }

   // Process the data.
}