Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Архивация файлов *.ZIP


Автор: CDell 25.7.2008, 12:52
Нужно заархивировать файл/папку в zip архив.
Посоветуйте библиотеку(класс по работе) и если можно, то примерчик к ней.
Сейчас делаю через командную строку WinRAR'a.

Автор: JackYF 25.7.2008, 13:15
zlib

Автор: str_vadim 1.8.2008, 13:52
zlib)

Автор: vinter 1.8.2008, 14:08
zlib

Автор: W4FhLF 1.8.2008, 14:41
Какбэ не хочу выделяться, но может zlib пойдёт? 

Автор: Alexeis 1.8.2008, 14:50
Гм.. вообще-то zlib не сделает архив zip smile . Можно при помощи библиотеки от 7z. Нашлись добрые люди и перебабахали сорцы 7zip. С ней мона делать и zip и 7zip архивы.

Добавлено через 5 минут и 10 секунд
Или вот еще нагуглил smile  
http://www.codeproject.com/KB/files/zip_utils.aspx

Автор: jonie 1.8.2008, 16:00
в zlib есть пример сохдающий архивы, зовется minzip

Автор: Peter 2.8.2008, 18:42
Использовал http://www.codeproject.com/KB/library/LiteZip.aspx. Мне хватало. Архивация+разархивация реализована в виде lib+dll.
Когда её подключал к программе, не сразу понял, что при разархивировании надо вначале нужный каталог сделать текущим (chdir).

Автор: CDell 2.8.2008, 18:59
Всем спасибо.
Но со zlib я так и не разобрался.
Использовал http://www.codeproject.com/KB/files/zip_utils.aspx.
Правдо там нет возможности архивировать всю папку. Пришлось дописывать самому(коекак, но вроде работает).

Но если у кого есть исходник архивации папки на zlib то буду рад.

Автор: Peter 11.8.2009, 11:09
В упомянутой выше LiteZip есть проблемы с юникодом, с установкой времени изменения для файлов.

Автор: Alexeis 11.8.2009, 11:21
Цитата(Peter @  11.8.2009,  10:09 Найти цитируемый пост)
В упомянутой выше LiteZip есть проблемы с юникодом, с установкой времени изменения для файлов.


  Вообще-то проблемы с юникодом у самого формата zip, где-то видел версию юникодного формата zip но не знаю насколько это стандартно и смогут ли его распаковать другие архиваторы. Лучше юзать 7z на быстром сжатии. Он юникодный.

Автор: Peter 11.8.2009, 12:17
Ради эксперимента я сделал с помощью 7-zip архив .zip и сложил в него файлы, в именах которых есть "юникодные" символы (т.е. их нет в CP-1251). Распаковал с помощью LiteUnzip - с названиями файлов и временем их изменения всё в порядке. Запаковал LiteZip-ом - "юникодный" символ разбился на два (в UTF-8, что ли, перекодировался); время сдвинулось на 4 часа (не местное летнее стало, а гринвичское).
Так что проблема, я полагаю, не в формате, а в библиотеке. Разбираюсь сейчас с 7-zip.dll.

Автор: Alexeis 11.8.2009, 14:31
Цитата(Peter @  11.8.2009,  11:17 Найти цитируемый пост)
Так что проблема, я полагаю, не в формате, а в библиотеке. Разбираюсь сейчас с 7-zip.dll. 

Я бы так смело не утверждал проверив лишь в одном случае.
Цитата


6.3.0         -Added tape positioning storage          09/29/2006
               parameters

              -Expanded list of supported hash algorithms

              -Expanded list of supported compression
               algorithms

              -Expanded list of supported encryption
               algorithms

              -Added option for Unicode filename 
               storage



Такой архив откроют только распаковщики основанные на формате 6.3+

Например, мой не очень новый 7zip при запаковке заменил символ на нижнее подчеркивание. После обновления начал правильно сохранять, но вот опять проблема, виндовый просмотрщик на XP SP3 с обновлениями неправильно прочитал имя. Не знаю как в висте, возможно там уже нет такой проблемы. Но можешь не сомневаться, что люди у которых установлен не самый последний софт будут плеваться от того что имена файлов попорчены. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)