我想读取.gz文件,将其解压缩并使用流和boost :: filesystem再次写入新文件。
我遇到了一个问题,即ofstream流无法写入压缩文件并退出并出现异常。
我找到了一个解决方案,但我不知道它为什么起作用:将osstream的std :: ios_base :: out切换为std :: ios_base :: binary。
有人可以解释一下为什么这行得通还是为什么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();
}
}