我编写了一个Logparser应用程序,现在我想对.gz文件进行解压缩。我用boost::iostreams和zlib尝试了一下,但是似乎不起作用,但是我不知道如何处理从压缩文件中获得的输入。
这是我的工作:
input.open(p.source_at(i).c_str(), ios_base::in | ios_base::binary);
boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
in.push(boost::iostreams::gzip_decompressor());
in.push(input);
boost::iostreams::copy(in, cout);
如果我的源文件以.gz结尾,则运行此代码。最后一行将解压缩的文件流正确输出到cout。
但是,如何从解压缩的文件中逐行获取?如果未压缩,我的程序将使用getline(input,transfer)从输入流中读取行。
现在,我想以相同的方式读取解压缩的文件,但是如何从中获取新行呢?
加速减退对此没有太大帮助。
提前致谢!
最佳答案
好的,我发现了。我只需要创建一个std::istream并将引用传递给缓冲区:
std::istream incoming(&in);
getline(incoming, transfer);
关于iostream - 带gzip_decompressor()的boost::filtering_streambuf,如何从文件逐行访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461972/