Почему мой boost :: filesystem :: ofstream не работает с std :: ios_base :: out? - PullRequest
0 голосов
/ 17 января 2019

Я хочу прочитать файл .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();
    }
}
...