Gle*_*Low 6 c c++ compression zip archive
zip文件格式以中央目录部分结尾,然后指向文件中的各个zip条目.这似乎允许zip条目出现在zip文件本身的任何地方.实际上,自解压zip文件就是一个很好的例子:它们以可执行文件开头,所有zip条目都在可执行字节之后.
问题是:zip文件格式是否真的允许稀疏或非连续的zip条目?例如,如果zip条目之间有空或其他未说明的字节?最终的PK笔记和维基百科文章似乎都允许这样做.所有/大多数典型的zip实用程序都可以使用这种稀疏的zip文件吗?
用例是这样的:我希望能够删除或替换zip文件中的zip条目.为此,典型的minizip等库要求您复制整个zip文件,而不是复制已删除或替换的zip条目,这似乎浪费和缓慢.
过度分配,例如1.5x的条目存储不是更好,然后当删除或替换条目时,你可以找出未分配的字节在哪里并直接使用它们?使用1.5x存储意味着如果zip条目线性增长,则重新分配也应该线性地摊销.它类似于文件系统块分配,但可能不那么复杂.
这也有助于很多基于zip的文件格式.而不是必须在某个地方(甚至在内存中)使用临时解压缩的文件进行编辑/更改然后必须将批次重新压缩回文件格式的某个临时目录,这将减少重新拉链和重写部分zip的需要文件.
是否有任何C/C++库可以做到这一点?
不。读取中央目录是可选的。zip 解码器可以(有些解码器确实如此)简单地从头开始按顺序读取 zip 文件,期望连续看到本地标头和条目数据。他们甚至不需要查看中央目录就可以完成解码工作。
为了执行您想要的操作,您需要在有用条目之间放入虚拟 zip 条目以保留该空间。至少如果您想与 zip 世界的其他部分兼容。
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |