【问题标题】:Reading gziped file line by line逐行读取gzip文件
【发布时间】:2020-04-27 19:41:03
【问题描述】:

我有在 c# 中使用 GZipStream 创建的 gz 文件。

我正在尝试用 c++ 逐行阅读它。

这是我正在使用的代码

#include <iostream>
#include <fstream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>
#include <sstream>


int main()
{
    using namespace std;

    ifstream file(R"(path-to-my-file.gz)", ios_base::in | ios_base::binary);
    boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
    in.push(boost::iostreams::zlib_decompressor());
    in.push(file);
    std::istream incoming(&in);
    string line;
    while(true)
    {
        getline(incoming, line);
        cout << "line:"<<line << endl;
        cin.get();
    }
}

我已经从 https://www.zlib.net/ 下载了 zlib,并使用 b2 -sZLIB_SOURCE="G:\c++source\zlib-1.2.11" 重新构建了 boost。

问题是line 总是空的。上面的代码有什么问题?

【问题讨论】:

  • 您没有对getline() 进行任何错误处理。 while(true) { getline(incoming, line); ...} 应该改为while(getline(incoming, line)) { ... } 另外,zlib 和 gzip 是两种不同的格式。你试过boost::iostreams::gzip_decompressor了吗?
  • 是的,我确实尝试过 gzip_decompressor,而且效果很好
  • 您应该将其发布为答案

标签: c++ boost zlib


【解决方案1】:

问题是,我使用的是 boost::iostreams::zlib_decompressor() 而不是 boost::iostreams::gzip_decompressor()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2014-06-21
    • 2012-06-13
    • 2016-11-22
    相关资源
    最近更新 更多