在下面的代码中,我收集了一些二进制文件,这些二进制文件是通过下载iso文件的一部分而创建的。单独地,它们只是字节的集合,没有自己的语义。我希望将它们合并到一个文件中,回到原始的iso。由于所有单个文件都只是二进制文件,因此我分别在std::ios_base::binary
和std::ifstream
中传递了std::ofstream
。但是,即使以二进制模式打开,operator<<
中的std::ifstream
似乎仍在进行一些格式化或语言环境配置。在我的特殊情况下,output.iso缺少3000多个字节,但是如果我使用linux cat
来合并它们,则大小正确并形成了一个真实的iso文件。我使用的文件是iso的12个部分,每个部分大约包含160 MiB,因此不适合在此处全部上传。
#include <fstream>
#include <vector>
using namespace std;
int main() {
vector<ifstream> files; // assume all the streams are created correctly,
// std::ios_base::binary is passed in
ofstream out{"output.iso", std::ios_base::binary | std::ios_base::trunc |
std::ios_base::ate};
for (auto const &file : files) {
out << file.rdbuf();
}
// the size of the output.iso is not the size of all the individual files combined
// when using the linux cat command to merge all files together, it works as
// expected with the size of the output binary equal to the size of all
// individual files combined
}