Zip-библиотека сжатия на лету в C для потоковой передачи - PullRequest
8 голосов
/ 30 августа 2011

Существует ли библиотека для создания zip-файлов (формат zip-файла , а не gzip или любой другой формат сжатия) на лету (поэтому я могу начать отправку файла во время сжатия) для большие файлы (4 Гб и выше).

Степень сжатия не имеет большого значения (в основном медиафайлы).

Библиотека должна иметь c-интерфейс и работать на Debian и OSX.

Ответы [ 3 ]

4 голосов
/ 31 августа 2011

libarchive поддерживает любой формат на лету и даже файлы в памяти.

3 голосов
/ 30 августа 2011

zlib поддерживает сжатие кусками.вы должны иметь возможность начать отправку небольшого фрагмента сразу после его сжатия, пока библиотека все еще сжимает следующий фрагмент.(см. этот пример )

(к сожалению, таблица файлов хранится в конце zip-файла, поэтому файл будет недоступен до тех пор, пока он не будет завершен на стороне получателя)

1 голос
/ 18 сентября 2014

Пока этот вопрос старый и уже дан ответ, я отмечу новое потенциальное решение для тех, кто его находит.

Мне нужно было нечто очень похожее, портативную и очень маленькую библиотеку, которая создавала ZIP-архивы в потоковом режиме в C. Не найдя ничего подходящего, я создал ту, которая использует zlib, доступную здесь:

https://github.com/CTrabant/fdzipstream

Этот код зависит только от zlib и, по сути, обеспечивает простой интерфейс для создания ZIP-архивов. Что наиболее важно (для меня), выходной поток может быть передан в трубу, сокет, что угодно, поскольку выходной поток не должен быть доступным для поиска. Код очень маленький, один исходный файл и заголовочный файл. Работает на OSX и Linux и, вероятно, в других местах. Надеюсь, это поможет кому-то, кроме меня ...

...