Я хочу распаковать файл, используя 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
Буду признателен за любую помощь / советы о том, как решить эту проблему
Устройство должно быть последним элементом, который вы вставляете в 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;
}
Других решений пока нет …