Есть ли библиотека для создания zip-файлов (формат zip-файлов, а не gzip или любой другой другой формат сжатия) на лету (так что я могу начать отправку файла во время сжатия) для очень больших файлов (4 Гб и выше).
Степень сжатия не имеет большого значения (в основном медиафайлы).
Библиотека должна иметь c-интерфейс и работать в Debian и OSX.
3 ответа
Libarchive поддерживает любой формат, который вы хотите, на лету и даже файлы в памяти.
Zlib поддерживает сжатие по частям. вы должны иметь возможность начать отправку небольшого фрагмента сразу после его сжатия, пока библиотека все еще сжимает следующий фрагмент. (см. этот пример)
(к сожалению, таблица файлов хранится в конце zip-файла, поэтому файл нельзя будет использовать, пока он не будет завершен на стороне получателя)
Хотя это старый вопрос, на который уже дан ответ, я отмечу новое потенциальное решение для тех, кто его найдет.
Мне нужно было что-то очень похожее, портативная и очень небольшая библиотека, которая создавала бы ZIP-архивы в потоковом режиме на C. Не найдя ничего подходящего для всех требований, я создал библиотеку, использующую zlib, доступную здесь:
https://github.com/CTrabant/fdzipstream
Этот код зависит только от zlib и, по сути, предоставляет простой интерфейс для создания ZIP-архивов. Самое главное (для меня) вывод может быть передан в канал, сокет, что угодно, поскольку выходной поток не должен быть доступен для поиска. Код очень маленький, единственный исходный файл и файл заголовка. Работает на OSX и Linux и, возможно, где-то еще. Надеюсь, это поможет кому-то помимо меня ...
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.