使用boost解压文件
Decompressing a file using 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
非常感谢 help/tips 如何解决这个问题
该设备必须是您推送到 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;
}
我想使用 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
非常感谢 help/tips 如何解决这个问题
该设备必须是您推送到 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;
}