使用boost将多个文件解压缩到一个文件中

时间:2016-08-16 09:47:30

标签: c++ boost gzip boost-iostreams

我有一组压缩文件。我必须解压缩所有文件并创建一个大文件。下面的代码工作正常,但我不想使用std :: stringstream,因为文件很大,我不想创建文件内容的中间副本。

如果我尝试直接使用boost::iostreams::copy(inbuf, tempfile);,它会自动关闭文件(tmpfile)。有没有更好的方法来复制内容?或者至少,我可以避免自动关闭此文件吗?

std::ofstream tempfile("/tmp/extmpfile", std::ios::binary);
for (set<std::string>::iterator it = files.begin(); it != files.end(); ++it)
{
    string filename(*it);
    std::ifstream gzfile(filename.c_str(), std::ios::binary);

    boost::iostreams::filtering_streambuf<boost::iostreams::input> inbuf;
    inbuf.push(boost::iostreams::gzip_decompressor());
    inbuf.push(gzfile);

    //closes tempfile automatically!!
    //boost::iostreams::copy(inbuf, tempfile); 

    std::stringstream out;
    boost::iostreams::copy(inbuf, out);
    tempfile << out.str();
}
tempfile.close();

0 个答案:

没有答案