iostream - 带gzip_decompressor()的boost::filtering_streambuf,如何从文件逐行访问

标签 iostream zlib boost-iostreams

我编写了一个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/

相关文章:

没有close()方法的Java中断输入流

C++ 最小字符串宽度

c++ - 为什么我不能再给数组赋值

c++ - zlib deflateInit 总是返回 Z_STREAM_ERROR

c++ - 如何使用压缩器 Boost::Iostreams 过滤器作为 Boost::Log 中的接收器

c++ - "if (getline(fin, str)) {}"是否符合C++11标准?

c++ - 使用 minizip 从内存缓冲区打开文件

c++ - ZLIB解压缩

c++ - boost iostream : how to turn ifstream into memory mapped file?

gdb - 使用 boost::iostreams 时未找到警告消息 RTTI 符号