如何使用C / C ++使用zlib压缩目录或多个文件?

时间:2011-12-01 03:44:08

标签: c++ c zlib

我确实搜索了这个主题,但我没有找到任何相关的线索。

有人可以给我一些可以解决问题的提示或演示代码吗?

提前致谢。

--- --- FYI

我想在这里做的是压缩文件并上传到远程PC。 我认为它将采取以下步骤:

a)初始化压缩文件头并发送到远程PC并保存该压缩文件头。

b)打开文件以读取部分文件数据并在本地压缩文件数据。

c)通过管道(例如tcp或udp)将压缩数据发送到远程PC。

d)将数据从压缩的管道保存在远程PC上。

e)如果有多个文件,请返回b)

e)当所有文件都被压缩并传输到远程PC时,然后关闭压缩文件。

这里有两个问题:

a)压缩/解压缩

b)文件格式

谢谢你们!

2 个答案:

答案 0 :(得分:5)

zlib会压缩单个流。如果要压缩多个文件,则需要执行以下两项操作之一:

  • 定义一个格式(或使用现有格式),将多个文件合并为一个流,然后压缩;或
  • 单独压缩每个文件,然后使用某种格式将这些文件合并为一个输出文件。

如果您采用第一个选项,使用现有的tar格式组合文件,您将生成一个.tar.Z文件,可以使用标准工具提取,因此这是一个很好的方法走。您可以使用libtar生成tar存档。

答案 1 :(得分:3)

我已经在minizip周围构建了一个包装器,添加了我需要的一些功能并使其更好用。是否使用最新的c ++ 11并使用Visual Studio 2013开发(应该是可移植的,但我没有在unix上测试过它)

这里有完整的说明:https://github.com/sebastiandev/zipper

但是尽可能简单:

Zipper zipper("ziptest.zip");
zipper.add("somefile.txt");
zipper.add("myFolder");
zipper.close();

你可以压缩整个文件夹,流,矢量等。另外一个很好的功能就是完全在内存中完成所有工作。