2010-12-01 44 views
5

我有很多小文件需要与我构建的应用程序一起提供,我希望将这些文件放入存档中以使复制和重新分发更加容易。 我也非常喜欢把它们放在一个地方,所以我只需要比较一个文件的md5,以防万一出错。容易访问的C++文件容器(例如zip)

我想它可以装载归档和档案内恢复的文件列表和文件加载到内存中,如果我需要访问它的类。

我已经在互联网上搜索了不同的方法来实现我想要的,并且了解了zlib和lzma sdk。 两者都没有真正吸引我,因为我没有真正发现如何便携式zlib,我不喜欢lzma sdk,因为它只是很多,我不想炸掉应用程序,因为这个问题。 zlib的另一个缺点是我没有C/C++经验(我对C++真的很陌生)去获取手册中的所有内容。

我还必须补充说这是一个时间紧迫的问题。我虽然在某种程度上实现了像tar这样的简单格式,但我可以轻松地访问我的应用程序中的文件,但我现在还没有找到时间来做这件事。

所以我在寻找的是一个库,它允许我访问档案中的文件。如果有人能在这里指出我正确的方向,我会很高兴。

在此先感谢, 罗宾。

编辑:我需要在Linux和Windows下访问档案。对不起,我一开始没有提到这一点。

回答

2

答案取决于您是否计划在归档初始构建后通过代码修改归档。

如果你不需要修改它,你可以使用TAR - 这是一个方便和简单的格式。如果你想压缩,你可以实现tar.gz读取器或找到一个这样做的库(我相信有一些可用的,包括开源的)。

如果您的应用程序需要随机访问数据或需要修改归档,那么常规的TAR或ZIP归档不是很好。虚拟文件系统(例如我们的SolFS或CodeBase文件系统)将更适合:虚拟文件系统适合频繁修改存储,而归档主要针对一次写入多次使用场景。

2

zlib是高度便携性和非常广泛的使用。如果您无法理解C++界面,则可以选择其他语言 - 请参阅“相关外部链接”here

在你寻找不同的东西之前再来看看。

+1

但是`zlib`没有做OP想要归档的内容。它压缩,但它本身不能理解.zip文件格式。 – 2010-12-01 15:55:30

+0

是的,压缩只需要秒,但我主要需要将数百个小文件分组到一个文件中。 – Robin 2010-12-01 16:00:04

2

如果您使用Qt或Windows,您还可以将数据打包到可执行文件的资源区域。您只需使用此技术分发可执行文件。有一个定义良好的API已经被编写和测试以访问该数据。

3

对于压缩和解,我一直偏爱ZipUtils,这使得过程轻松,是建立在zlib的和info-ZIP库的顶部。

+0

感谢链接队友,但我需要它在Windows和Linux上运行。 ZipUtils只适用于Windows。 – Robin 2010-12-01 16:05:58

+0

@Robin:请问您可以把它放在您的问题中吗? :) 谢谢! – 2010-12-01 16:06:33

0

zlib API是要走的路。简单和便携。查看访问存档文件的API的unzip.h头文件。它在C中,非常容易。

如果文件很小,可以将它们转储为字符串文本(搜索bin2h实用程序)并包含在项目中。然后更改读取文件的代码。如果当前使用ifstream类读取所有文件,只需将其更改为istringstream类并重新编译代码即可。

0

尝试使用Quazip - 使用非常简单。您可以将它用作您从中读取压缩文件的流。