C++ C++;文件容器(如zip)便于访问

C++ C++;文件容器(如zip)便于访问,c++,zip,archive,C++,Zip,Archive,我有很多小文件需要与我构建的应用程序一起提供,我想将这些文件放入存档,以使复制和重新分发更加容易。 我也非常喜欢将它们放在一个地方的想法,所以我需要比较一个文件的md5,以防出现问题 我正在考虑一个类,它可以加载归档文件,并返回归档文件中的文件列表,如果需要访问,还可以将文件加载到内存中 我已经在互联网上搜索了不同的方法来实现我想要的,并且找到了关于zlib和lzma sdk的信息。 这两个都没有真正吸引我,因为我没有真正了解zlib的可移植性,我也不喜欢lzma sdk,因为它只是太多了,我不

我有很多小文件需要与我构建的应用程序一起提供,我想将这些文件放入存档,以使复制和重新分发更加容易。 我也非常喜欢将它们放在一个地方的想法,所以我需要比较一个文件的md5,以防出现问题

我正在考虑一个类,它可以加载归档文件,并返回归档文件中的文件列表,如果需要访问,还可以将文件加载到内存中

我已经在互联网上搜索了不同的方法来实现我想要的,并且找到了关于zlib和lzma sdk的信息。 这两个都没有真正吸引我,因为我没有真正了解zlib的可移植性,我也不喜欢lzma sdk,因为它只是太多了,我不想因为这个问题而炸毁应用程序。zlib的另一个缺点是,我没有C/C++经验(我对C++非常陌生)来理解手册中的所有内容

我还要补充一点,这是一个时间紧迫的问题。我花了一些时间来实现像tar这样的简单格式,这样我就可以轻松访问我的应用程序中的文件,但我只是还没有找到时间去做

所以我要搜索的是一个库,它允许我访问归档文件中的文件。如果有人能给我指出正确的方向,我会很高兴的

提前感谢,, 罗宾


编辑:我需要在linux和windows下访问存档。很抱歉,我一开始没有提到这一点。

zlib
具有很高的可移植性,并且使用非常广泛。如果你不能理解C++接口,那么有许多其他语言的替代品——参见“相关的外部链接”。
在搜索其他内容之前,请再看一看。

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

对于压缩,我一直偏爱它,它使过程变得简单,并且构建在zlib和info-zip库之上。

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

如果你不需要修改它,你可以使用TAR——它是一种方便而简单的格式。如果您想要压缩,您可以实现tar.gz阅读器,或者找到一些实现压缩的库(我相信有一些可用的库,包括开源库)


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

zlib API是一种不错的选择。简单易携带。查看访问存档文件的API的unzip.h头。它是C语言的,非常简单


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

尝试使用-使用起来非常简单。您可以将其用作一个流,从中动态读取压缩文件。

但是
zlib
不符合OP的要求,这就是归档。它可以进行压缩,但它本身无法理解.zip文件格式。是的,压缩只需要一秒钟,我主要需要的是将数百个小文件组合成一个文件。感谢链接助手,但我需要它在windows和linux上运行。ZipUtils只能在windows上使用。@Robin:那你能把它放到你的问题里吗?:)谢谢Zip就足够了,但我根本没有研究VFS这个术语。我找到了PhysicsFS,我想这正是我将在我的项目中使用的。非常感谢您的回复。感谢您的建议,但我不想在控制台应用程序中添加qt依赖项。