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

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

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

8
Daniel O 30 Авг 2011 в 14:49

3 ответа

Лучший ответ

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

4
wormsparty 31 Авг 2011 в 11:08

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

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

3
Adrien Plisson 30 Авг 2011 в 10:54

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

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

https://github.com/CTrabant/fdzipstream

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

2
terse 18 Сен 2014 в 18:27