我需要使用我构建的应用程序提供许多小文件,并且我希望将这些文件放入存档中以使复制和重新分发更加容易。 我也非常喜欢将它们放在一个地方的想法所以我需要比较一个文件的md5,以防出现问题。
我正在考虑一个类,它可以加载存档并返回存档中的文件列表,并在需要访问时将文件加载到内存中。
我已经在互联网上搜索了实现我想要的不同方法,并了解了zlib和lzma sdk。 两者都没有真正吸引我,因为我没有真正发现便携式zlib是如何,我不喜欢lzma sdk,因为它只是很多,我不想因为这个问题而炸毁应用程序。 zlib的另一个缺点是我没有C / C ++经验(我是C ++的新手),无法在手册中解释所有内容。
我还要补充一点,这是一个时间紧迫的问题。我有一段时间关于以某种方式实现像tar这样的简单格式,我可以轻松访问我的应用程序中的文件,但我还没有时间去做。
所以我正在搜索的是一个允许我访问存档中文件的库。如果有人能指出我在正确的方向,我会很高兴。
提前致谢, 罗宾。
编辑:我需要在linux和windows下访问存档。对不起,我在开始时没有提到。
答案 0 :(得分:3)
对于压缩,我总是偏向于ZipUtils,这使得流程变得简单,并且构建在zlib和info-zip库之上。
答案 1 :(得分:2)
zlib
非常便携且使用非常广泛。如果您无法理解C ++接口,那么还有许多其他语言的替代方案 - 请参阅“相关外部链接”here。
在搜索不同的内容之前,再看看。
答案 2 :(得分:2)
如果您使用的是Qt或Windows,您还可以将数据打包到可执行文件的资源区域。您只需使用此技术分发可执行文件。已经编写并测试了一个定义良好的API来访问该数据。
答案 3 :(得分:2)
答案取决于您是否计划在最初构建存档后通过代码修改存档。
如果您不需要修改它,您可以使用TAR - 它是一种方便简单的格式。如果你想要压缩,你可以实现tar.gz阅读器或找到一些这样做的库(我相信有一些可用的,包括开源的)。
如果您的应用程序需要随机访问数据或需要修改存档,那么常规的TAR或ZIP存档就不好了。虚拟文件系统(例如我们的SolFS或CodeBase文件系统)将更加适合:虚拟文件系统适用于频繁修改存储,而归档文件主要针对一次性写入多次使用场景。
答案 4 :(得分:0)
zlib API是最佳选择。简单便携。查看用于访问存档文件的API的unzip.h标头。它在C中很容易。
如果文件很小,您可以将它们转储到字符串文字(搜索bin2h实用程序)并包含在您的项目中。然后更改读取文件的代码。如果当前使用ifstream类读取所有文件,只需将其更改为istringstream类并重新编译代码。
答案 5 :(得分:0)
尝试使用Quazip - 使用起来非常简单。您可以将其用作从中读取压缩文件的流。