Я хочу прочитать файл .gz, распаковать его и снова записать новый файл, используя streams и boost :: filesystem.
Я столкнулся с проблемой, когда поток ofstream не смог записать сжатый файл и вышел с исключением.
Я нашел решение, но не могу сказать, почему оно работает: переключение std :: ios_base :: out на std :: ios_base :: binary для osstream.
Может кто-нибудь объяснить мне, почему это работает или почему с помощью std :: ios_base :: out было сгенерировано исключение?
void decrompressGzFile(const std::string& pathToFile, const std::string
pathToConvertedFile)
{
boost::filesystem::path path{ pathToFile };
boost::filesystem::ifstream inStream(pathToFile,
std::ios_base::in | std::ios_base::binary);
boost::filesystem::ofstream outStream(pathToConvertedFile, std::ios_base::binary); //working
//boost::filesystem::ofstream outStream(path, std::ios_base::out); //gzip error: iostream stream error
boost::iostreams::filtering_streambuf<boost::iostreams::input> decompressStream;
decompressStream.push(boost::iostreams::gzip_decompressor());
decompressStream.push(inStream);
try
{
boost::iostreams::copy(decompressStream, outStream);
} catch (std::exception& e)
{
std::cout << e.what();
}
}