我如何使用zip作为数据的容器?

时间:2012-11-19 14:55:30

标签: c++ zip archive

我经常遇到具有zip签名的文件类型,但它们不是压缩档案,或者它们根本不是zip文件;通常,签名中的文件看起来像压缩档案,但实际上它们只是自定义数据集的容器。

例如,可以使用存档实用程序打开.blend文件或.apk。

使用编程方法,我如何创建自己的新文件类型定义,避免创建新文件类型和使用zip作为容器的所有复杂问题?

我对C / C ++编程感兴趣。


修改

我还想强调一个事实,即我在讨论容器以避免与编码和数据表示等平台相关的问题。

1 个答案:

答案 0 :(得分:1)

我怀疑你问的是如何创建一个与具有不同文件扩展名的zip文件完全相同的东西(例如,afaik是用于.APK文件的策略)。

相当简单的答案是,您可以完全按照自己的方式创建其中一个,并使用具有自己扩展名的文件名。正如评论中所提到的,您可以使用各种库来创建和处理zip文件。

此文件可以(如APK)在存档实用程序中打开,但默认情况下与系统上的某些其他操作相关联(因为apk与安装相关联,而.blend与blender相关联)。

这种技术非常普遍,许多常见的应用程序文件格式只不过是一个压缩文件集合和一些标准索引文件,它们显示了它们如何组合在一起。

另请注意@Jan Hudec关于编码问题的评论 - 没有通过这条路线逃脱。

关于编码:(我建议你问一个关于这些问题的新的,不同的问题 - 这里有许多比我更多的实践知识) 您提到您希望在可能异构的系统上获得完全相同的数据。 我认为你必须使用文本编码:在你的C代码在不同系统上编译之后,不能保证类型长度,对齐或表示是相似的,因此简单地写二进制blob不是很可靠。 在为文本编码选择字符集时,尽量使其尽可能具体,以便在其他系统上准确匹配字符集。