逐行读取 gzip 文件
Reading gziped file line by line
我有使用 GZipStream 在 c# 中创建的 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
总是空的。上面的代码有什么问题?
问题是,我使用的是 boost::iostreams::zlib_decompressor() 而不是 boost::iostreams::gzip_decompressor()
我有使用 GZipStream 在 c# 中创建的 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
总是空的。上面的代码有什么问题?
问题是,我使用的是 boost::iostreams::zlib_decompressor() 而不是 boost::iostreams::gzip_decompressor()