9

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

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

是否有一种标准方法可以将来自多个文件的字节流组合成一个压缩存档,或者 Boost iostream 库中是否有一个方便的函数或方法?

非常感谢您的帮助。

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

更新 2:在我的 Linux 构建环境上完成此任务后,我发现 QuaZip 根本无法与 Visual Studio 编译器一起使用。有可能解决所有这些编译器错误,但请注意这条路径的任何人。

4

7 回答 7

9

我找到了以下两个库:

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

啊,当然,我已经从这个关于压缩/解压缩目录的 Qt Mailinglist 问题中删除了这些网站:)

于 2009-02-03T04:10:10.560 回答
2

http://www.zlib.net/

于 2009-02-03T03:53:05.243 回答
1

只是为了记录...

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

最终使用了Minizip库。它是用纯 C 编写的,但是围绕它设计一个简单的 C++ 包装器是轻而易举的事,最终结果效果很好,至少对我来说是这样。

于 2009-04-08T15:30:16.897 回答
1

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

这里有完整的描述:https ://github.com/sebastiandev/zipper

您可以压缩整个文件夹、流、向量等。还有一个不错的功能是完全在内存中完成所有操作。

于 2015-07-26T14:32:01.467 回答
1

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

Poco::Zip 文件

于 2019-12-30T07:33:22.143 回答
0
system("zip myarchive.zip *");
于 2009-02-03T03:46:42.820 回答
0

我在 Windows 上使用 VisualStudio 2010 尝试了 QuaZIP 0.4.3——仍然存在问题,但可以轻松解决。

使用 VS 构建:

  1. 使用 CMake 为 QuaZIP 配置和生成 VS 解决方案。
  2. 用 VS 打开解决方案并构建——你首先会注意到它找不到“zlib.h”。
  3. 打开 quazip 项目的首选项并将 Qt 的 Zlib 副本的路径添加到 C/C++->General->Additional Include Directories: $(QTDIR)/src/3rdparty/zlib。
  4. 再次重建,您将收到大量警告和一个错误 C2491:QuaZipFile::staticMetaObject 上的 dllimport 静态问题。
  5. 这是因为 QuaZipFile 被声明为“类 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 现在可以正常构建。
于 2011-09-29T22:22:36.673 回答