C语言流式Zip实时压缩库

8

有没有一个库可以实时创建zip文件(zip文件格式而不是gzip或任何其他压缩格式),用于非常大的文件(4 GB及以上),这样我可以在文件被压缩时开始发送文件。

压缩比并不重要(主要是媒体文件)。

该库必须具有C接口,并在Debian和OSX上工作。


@karlphillip 很抱歉。需要支持Debian和OSX。 - Daniel O
3个回答

4

libarchive支持任何你想要的格式,即时处理甚至在内存文件中。


看起来非常有前途。我会去试试看。 - Daniel O

3

zlib支持按块压缩。在库仍在压缩下一个块时,您应该能够立即发送已压缩的小块。 (请参见此示例

(不幸的是,文件表存储在zip文件的末尾,因此在接收方完成之前,文件将无法使用)


我曾经认为zlib无法处理zip文件?请参阅http://www.zlib.net/zlib_faq.html#faq11 - Daniel O
1
关于zip文件的说法不正确,目录被添加到末尾是为了简化随机访问,但文件条目本身是按顺序编写的。末尾的目录仅用于方便起见。 - Patrick Schlüter
@Hasturkun 不是这样的。Minizip项目具有zlib依赖项,可以读取zip文件。这并不意味着Minizip自动支持即时压缩,也不意味着zlib支持zip文件。如果答案表述为:您可以使用zlib轻松创建此zip库,或者您可以检查Minizip是否支持即时压缩,我更倾向于将其标记为已接受。 - Daniel O
1
好的,从技术上讲,指向一个库然后告诉你自己去检查并不是回答你的问题...这就是为什么我不会纠正这个答案。 - Adrien Plisson
我也看了一下托管在7-zip.org上的LZMA库:它支持分块解压缩,但不支持压缩... - Adrien Plisson
显示剩余2条评论

2
虽然这个问题已经老旧并且已经有答案了,但是我想提供一个新的可能解决方案给那些发现这个问题的人。
我需要一个非常相似的东西,一个在C语言中以流式方式创建ZIP档案的便携式和非常小的库。没有找到符合要求的任何东西,所以我创建了一个使用zlib的库,在这里可以找到:

https://github.com/CTrabant/fdzipstream

那段代码只依赖于zlib,基本上提供了一个简单的接口来创建ZIP档案。最重要的是(对我来说),输出可以被流式传输到管道、套接字等等,因为输出流不需要可寻址。这段代码非常小,只有一个源文件和一个头文件。可以在OSX和Linux上运行,可能也适用于其他操作系统。希望它能帮助不止我一个人...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接