我正在使用filetering_istream类型将信息保存在解压缩文件中,同时使用'boost/iostreams/filtering_stream.hpp'。但是我想把它转换成ifstream类型。有没有办法做到这一点?万分感谢!将iframestream类型的filtering_istream类型的变量投入?
的代码如下:
#include <istream>
#include <fstream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
int main(){
std::ifstream file("test_data.dat.gz");
boost::iostreams::filtering_istream in;
in.push(boost::iostreams::gzip_decompressor());
in.push(file);
/* add code to convert filtering_istream 'in' into ifstream 'pfile' */
/* It seems that the following code returns a pointer NULL */
// std::ifstream* pfile = in.component<std::ifstream>(1);
return 0;
}
努力的boost ::裁判和boost ::通过zett42提出的包装后,ifstream的确实有效。唯一的问题是它没有给出想要的短语。
在我的.gz文件的文本,我写道:
THIS IS A DATA FILE!
8 plus 8 is 16
但使用ifstream的,我得到:
is_open: 1
\213<\373Xtest_data.dat\361\360V"G\307G7OWE.\205\202\234\322b\205\314bC3.\327+>\314$
我不知道这里发生了什么,我能做点什么来恢复它吗?
如果您使用'ifstream',您将读取* compressed *数据。也许我完全误解了你的问题。如果你想读取未压缩的数据,你只需从'in'中读取。那么不需要“施放”任何东西。 – zett42