当前位置:  开发笔记 > 编程语言 > 正文

如何读/写gzip压缩文件?

如何解决《如何读/写gzip压缩文件?》经验,为你挑选了3个好方法。

如何在C++中读/写gzip文件?

这里的iostream包装类看起来不错,这是一个简单的用法示例:

gz::igzstream in(filename);
std::string line;
while(std::getline(in, line)){
  std::cout << line << std::endl;
}

但我无法真正链接它(虽然我有/usr/lib/libz.a).一个简单的

g++ test-gzstream.cpp -lz

不这样做(undefined reference to gz::gzstreambase::~gzstreambase()).



1> Johannes Sch..:

考虑使用Boost zip过滤器.据他们说,支持bzip,gzipzlib格式.

提升zlib

提升gzip

提升bzip2



2> tflutre..:

为了提供比其他用户简要提到的更多详细信息,以下是我gzstream在计算机上使用的方法.

首先,我下载gzstream并安装在我的家中(最后两行可以添加到您的家中~/.bash_profile):

cd ~/src
mkdir GZSTREAM
cd GZSTREAM/
wget http://www.cs.unc.edu/Research/compgeom/gzstream/gzstream.tgz
tar xzvf gzstream.tgz
cd gzstream
make
export CPLUS_INCLUDE_PATH=$HOME/src/GZSTREAM/gzstream
export LIBRARY_PATH=$HOME/src/GZSTREAM/gzstream

然后,我测试了安装:

make test
...
# *** O.K. Test finished successfully. ***

最后,我编写了一个虚拟程序来检查我是否可以有效地使用该库:

cd ~/temp
vim test.cpp

这是代码(极简主义,应该对实际应用程序进行大大改进!):

#include 
#include 
#include 
using namespace std;

int main (int argc, char ** argv)
{
  cout << "START" << endl;

  igzstream in(argv[1]);
  string line;
  while (getline(in, line))
  {
    cout << line << endl;
  }

  cout << "END" << endl;
}

这是我编译它的方式:

gcc -Wall test.cpp -lstdc++ -lgzstream -lz

最后但并非最不重要的,这是我如何使用它:

ls ~/ | gzip > input.gz
./a.out input.gz
START
bin/
src/
temp/
work/
END



3> Macke..:

显然你需要定义gzstreambase析构函数的cpp文件,即gzstream.cpp(这是链接错误).libz只是gzip的c-api,它对c ++ stdlib流一无所知.

Boost的iostream lib也有gzip和bzip2流.

编辑:更新链接以指向包含主要错误修复的代码的最新版本.


gzstream是LGPL许可的.注意不要在闭源时使用静态库.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有