У меня есть набор сжатых файлов. Я должен распаковать все файлы и создать один большой файл. ниже код работает нормально, но я не хочу использовать std :: stringstream, потому что файлы большие, и я не хочу создавать промежуточные копии содержимого файла.распаковать несколько файлов в один файл с помощью boost
Если я попытаюсь напрямую использовать 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();
Использовать тривиальный выходной фильтр поверх целевого файла? –