zip 文件格式以中央目录部分结尾,然后指向文件中的各个 zip 条目。这似乎允许 zip 条目出现在 zip 文件本身的任何位置。事实上,自解压 zip 文件就是一个很好的例子:它们以可执行文件开头,所有 zip 条目都出现在可执行字节之后。
问题是:zip 文件格式真的允许稀疏或不连续的 zip 条目吗?例如,zip 条目之间是否存在空字节或其他未计入字节?最终的 PK 说明和维基百科文章似乎都允许这样做。所有/大多数典型的 zip 实用程序都可以处理这种稀疏的 zip 文件吗?
用例是这样的:我希望能够删除或替换 zip 文件中的 zip 条目。为此,典型的 minizip 等库希望您复制整个 zip 文件,而不复制已删除或替换的 zip 条目,这看起来既浪费又缓慢。
过度分配不是更好吗,比如说 1.5 倍的条目存储空间,然后在删除或替换条目时,您可以找出未分配字节的位置并直接使用它们?使用 1.5 倍的存储意味着如果 zip 条目线性增长,则重新分配也应该线性摊销。它类似于文件系统块分配,但可能没有那么复杂。
这也有助于许多基于 zip 的文件格式。不必在某个地方(甚至在内存中)有一些临时目录以及用于编辑/更改的临时解压缩文件,然后必须将大量重新压缩回文件格式,这将减少重新压缩和重写部分 zip 的需要文件。
是否有任何 C/C++ 库可以做到这一点?