我有一组压缩文件。我必须解压缩所有文件并创建一个大文件。下面的代码工作正常,但我不想使用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();