我写了一个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(输入,传输)来读取输入流中的行(如果它没有被压缩)。
现在我想以相同的方式读取解压缩文件,但是如何从中获取新行?
加速计算对我没有多大帮助。
提前致谢!
答案 0 :(得分:10)
好的我发现了。我只需要创建一个std :: istream并将引用传递给缓冲区:
std::istream incoming(&in);
getline(incoming, transfer);