Zip on-the-fly compression library in C for streaming
Существует ли библиотека для создания zip-файлов ( формат zip-файла, а не gzip или любой другой формат сжатия) на лету (чтобы я мог начать отправку файла во время его сжатия) для очень больших файлов (4 ГБ и выше).
Степень сжатия не имеет большого значения (в основном медиа-файлы).
Библиотека должна иметь c-интерфейс и работать на Debian и OSX.
3 ответа
libarchive поддерживает любой формат на лету и даже файлы в памяти.
zlib поддерживает сжатие кусками. Вы должны иметь возможность начать отправку небольшого фрагмента сразу после его сжатия, пока библиотека все еще сжимает следующий фрагмент. (см. этот пример)
(к сожалению, таблица файлов хранится в конце zip-файла, поэтому файл будет недоступен до тех пор, пока он не будет завершен на стороне получателя)
Хотя этот вопрос старый и уже дан ответ, я отмечу новое потенциальное решение для тех, кто его нашел.
Мне нужно было нечто очень похожее, портативную и очень маленькую библиотеку, которая создавала ZIP-архивы в потоковом режиме на языке C. Не найдя ничего подходящего, я создал библиотеку, которая использует zlib, доступную здесь:
https://github.com/CTrabant/fdzipstream
Этот код зависит только от zlib и обеспечивает простой интерфейс для создания ZIP-архивов. Что наиболее важно (для меня), выходной поток может быть передан в трубу, сокет, что угодно, поскольку выходной поток не должен быть доступным для поиска. Код очень маленький, один исходный файл и заголовочный файл. Работает на OSX и Linux и, возможно, в других местах. Надеюсь, это поможет кому-то, кроме меня...