Библиотека сжатия Zip на лету на языке C для потоковой передачи

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

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

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


person Daniel O    schedule 30.08.2011    source источник
comment
@karlphillip Извините за это. Необходима поддержка Debian и OSX.   -  person Daniel O    schedule 30.08.2011


Ответы (3)


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

person wormsparty    schedule 31.08.2011
comment
Выглядит очень многообещающе. Проверим. - person Daniel O; 31.08.2011

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

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

person Adrien Plisson    schedule 30.08.2011
comment
У меня создалось впечатление, что zlib не может обрабатывать zip-файлы? См. zlib.net/zlib_faq.html#faq11. - person Daniel O; 30.08.2011
comment
Неправда о zip-файлах, каталог добавляется в конце для упрощения произвольного доступа, но сами записи файлов записываются последовательно. Каталог в конце предназначен только для удобства. - person Patrick Schlüter; 30.08.2011
comment
@DanielW: та же ссылка на FAQ указывает на contrib/minizip, который действительно создает zip-файлы с помощью zlib, так что, очевидно, может. - person Hasturkun; 30.08.2011
comment
@Hasturkun нет. Проект Minizip имеет зависимость от zlib и может читать zip-файлы. Это не означает автоматически, что Minizip поддерживает сжатие на лету, и не означает, что zlib поддерживает zip-файлы. Если бы ответ был сформулирован как: Вы можете легко создать эту zip-библиотеку самостоятельно, используя zlib, или вы можете проверить, поддерживает ли Minizip сжатие на лету, я был бы более склонен отметить ее как принятую. - person Daniel O; 31.08.2011
comment
ну, технически, указывая вам на библиотеку, а затем предлагая вам проверить самостоятельно, не является ответом на ваш вопрос ... поэтому я не буду исправлять этот ответ. - person Adrien Plisson; 31.08.2011
comment
также я взглянул на библиотеку LZMA, размещенную на 7-zip.org: она поддерживает распаковку кусками, но без сжатия ... - person Adrien Plisson; 31.08.2011
comment
теперь есть другой ответ, который кажется более верным, чем мой, я подумываю удалить этот ответ ... - person Adrien Plisson; 31.08.2011

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

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

https://github.com/CTrabant/fdzipstream

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

person terse    schedule 18.09.2014