使用gzip_decompressor()的boost :: filtering_streambuf,如何从文件中逐行访问

时间:2011-03-28 16:19:36

标签: 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(输入,传输)来读取输入流中的行(如果它没有被压缩)。

现在我想以相同的方式读取解压缩文件,但是如何从中获取新行?

加速计算对我没有多大帮助。

提前致谢!

1 个答案:

答案 0 :(得分:10)

好的我发现了。我只需要创建一个std :: istream并将引用传递给缓冲区:

std::istream incoming(&in);
getline(incoming, transfer);