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

时间:2018-03-30 20:03:39

标签: c++ linux io binaryfiles binary-data

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

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上。

2 个答案:

答案 0 :(得分:2)

  1. 使用ifstream::seekg移动文件的阅读位置。
  2. 从文件中读取适当的字节数。
  3. 处理从文件中读取的数据。
  4. 重复直至完成。
  5. 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.
    }
    

答案 1 :(得分:0)

看起来很简单..

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