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

问题描述 投票:8回答:7

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

如何压缩多个文件的目录,包括子目录?我正在寻找一种跨平台(Mac,Win,Linux)解决方案;我不希望取消一系列新流程。

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

非常感谢您的协助。

Update:QuaZip库看起来很棒。下载包中有一个示例(位于“ tests”目录中),非常清楚地显示了如何压缩文件目录。

Update 2:在我的Linux构建环境中完成此任务之后,我发现QuaZip在Visual Studio编译器中根本不起作用。可能有可能解决所有这些编译器错误,但请注意此路径的任何人注意。

c++ qt boost compression zlib
7个回答
9
投票

我发现了以下两个库:

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

啊,当然,我从this Qt Mailinglist问题中删除了有关目录压缩/解压缩的那些网站:)



1
投票

仅供记录...

今天,我需要在Visual C ++中执行非常相似的操作。 (尽管希望保持在其他平台上编译项目的可能性;但是更倾向于不仅仅为此目的采用Qt。)

最终使用Minizip库。它是用普通的C语言编写的,但是围绕它设计一个简单的C ++包装是一件轻而易举的事,并且最终的效果很好,至少出于我的目的。


0
投票

[我在装有Visual Studio 2010的Windows上尝试了QuaZIP 0.4.3,仍然存在问题,但可以轻松解决。]

使用VS构建:
  1. 使用CMake为QuaZIP配置和生成VS解决方案。

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

  • 0
    投票

    我围绕minizip构建了一个包装器,添加了一些我需要的功能,并使其更易于使用。它确实使用最新的c ++ 11,并且是使用Visual Studio 2013开发的,因此它应该为您开箱即用。


    0
    投票

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


    -1
    投票
    system("zip myarchive.zip *");
    
    © www.soinside.com 2019 - 2024. All rights reserved.