我有一个很长的二进制文件作为函数的输入。我可以将所有数据复制到新文件中,如下所示:
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上。
答案 0 :(得分:2)
ifstream::seekg
移动文件的阅读位置。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)
看起来很简单..
让你的函数在它应该开始复制的源中占用偏移量,以及要复制的字节数。然后从给定的起始点复制那么多字节。