Распаковка файла с использованием boost

Я хочу распаковать файл, используя boost, который был сжат с помощью bzip2

Я попробовал следующее, что приводит к ошибке, я не могу объяснить

std::stringstream readData(const std::string path) {
std::stringstream myStream;
std::ifstream input(path,std::ios_base::in);

boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
in.push(input);
in.push(boost::iostreams::bzip2_decompressor());
boost::iostreams::copy(in,myStream);

return myStream;
}

Я использовал c ++ 17, boost 1.58 и gcc 8.0 для компиляции кода выше

и получите следующую ошибку:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injectorstd::logic_error >'
what(): chain complete

Буду признателен за любую помощь / советы о том, как решить эту проблему

1

Решение

Устройство должно быть последним элементом, который вы вставляете в filtering_streambufпосле того, как вы нажали на устройство, вам не разрешено нажимать что-либо еще, поэтому вы получаете сообщение об ошибке. Увидеть https://www.boost.org/doc/libs/1_68_0/libs/iostreams/doc/classes/filtering_streambuf.html#policy_push

Ваш код должен быть:

std::stringstream readData(const std::string path) {
std::stringstream myStream;
std::ifstream input(path,std::ios_base::in);

boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
in.push(boost::iostreams::bzip2_decompressor());
in.push(input);
boost::iostreams::copy(in,myStream);

return myStream;
}
1

Другие решения

Других решений пока нет …