为什么我的boost :: filesystem :: ofstream无法与std :: ios_base :: out一起使用?

时间:2019-01-17 07:33:47

标签: c++ boost stream boost-filesystem gz

我想读取.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();
    }
}

0 个答案:

没有答案