如何使用C ++压缩文件目录?

时间:2009-02-03 02:43:29

标签: c++ qt boost compression zlib

我正在使用C ++,Boost和Qt开发一个项目。我理解如何使用例如Qt中的qCompress()函数压缩单个文件和字节流。

如何压缩多个文件的目录,包括子目录?我正在寻找一个跨平台(Mac,Win,Linux)解决方案;我宁愿不发动一堆新流程。

是否有标准方法将来自多个文件的字节流组合成压缩档案,或者Boost iostream库中是否有可用的便利功能或方法?

非常感谢你的帮助。

更新:QuaZip库看起来非常棒。下载包中的一个示例(在“tests”目录中)非常清楚地显示了如何压缩文件目录。

更新2 :在我的Linux构建环境中完成此任务后,我发现QuaZip根本不适用于Visual Studio编译器。可能有可能解决所有这些编译器错误,但对任何看不起这条道路的人都要小心。

7 个答案:

答案 0 :(得分:9)

我找到了以下两个库:

  • ZipIOS++。似乎是“纯粹的”C ++。它们不会将Windows明确列为受支持的平台。所以我认为你应该自己试试运气。
  • QuaZIP。基于Qt4。其实看起来不错。他们明确列出了Windows(使用mingw)。显然,它是[this]库的C ++包装器。

啊,当然,我已经从this Qt邮件列表问题中删除了那些关于压缩/解压缩目录的网站:)

答案 1 :(得分:1)

答案 2 :(得分:1)

仅供记录......

今天,我需要在Visual C ++中做一些非常相似的事情。 (虽然希望保留在其他平台上编译项目的可能性;但是为了这个目的,最好不要采用Qt。)

使用Minizip库结束。它是用简单的C语言编写的,但设计一个简单的C ++包装器是件轻而易举的事情,最终的结果非常好,至少对我来说是这样。

答案 3 :(得分:0)

我在Windows上使用VisualStudio 2010尝试过QuaZIP 0.4.3 - 仍有问题,但可以轻松解决。

使用VS进行构建:

  1. 使用CMake为QuaZIP配置和生成VS解决方案。
  2. 使用VS和build打开soltion - 您首先会注意到它找不到'zlib.h'。
  3. 打开quazip项目的首选项,并将Qt的Zlib副本的路径添加到C / C ++ - > General->其他包含目录:$(QTDIR)/ src / 3rdparty / zlib。
  4. 再次重建,你会收到很多警告和一个错误C2491:QuaZipFile上的dllimport静态问题:: staticMetaObject。
  5. 这是因为QuaZipFile被声明为“class QUAZIP_EXPORT QuaZipFile”,QUAZIP_EXPORT需要根据是否定义QUAZIP_BUILD来解析dll的Q_DECL_EXPORT和应用程序的Q_DECL_IMPORT。在构建QuaZIP QUAZIP_BUILD时应该定义但不是 - 配置过程定义错误完全无用的“quazip_EXPORTS”。
  6. 要修复,只需从所有构建配置中删除“quazip_EXPORTS”并添加QUAZIP_BUILD - QuaZIP现在可以正常构建。

答案 4 :(得分:0)

我已经在minizip周围构建了一个包装器,添加了我需要的一些功能并使其更好用。是否使用最新的c ++ 11并使用Visual Studio 2013开发,因此它应该为您开箱即用。

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

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

答案 5 :(得分:0)

Poco::Zip也是一种选择,它具有清晰的文档和一些演示代码。

Poco::Zip Document

答案 6 :(得分:-1)

system("zip myarchive.zip *");