Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Распаковка zip-файла с использованием zlib.

Автор: knkd
Дата сообщения: 10.04.2011 16:47
Мне понадобилось программно создавать zip-архивы в которых лежали бы файлы с разной степенью сжатия.
Ни одна из библиотек которые доступны моему пониманию этого не позволяла
В результате я решил работать с форматом файла вручную.

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

То что программа корректно путешествует по архиву и распознаёт имена фйайлов, говорит о том что я всё делаю верно...

Но теперь возникла проблема.
Содержимое секции с файлом не распаковывается с помощью zlib uncompress.
Я доставал содержимое в файл и пытался воспользоваться ZFile * gz = gzopen(...) - не получается.
На выходе распаковщика неизменно мусор.

Как zlib-ом распаковать файлы?
Автор: dmka
Дата сообщения: 10.04.2011 19:01
zlib это формат gzip, а не zip
http://www.zlib.net/zlib_faq.html#faq11

Вообще, лучше не изобретать велосипед, а воспользоваться, например, либой 7z http://www.7-zip.org. Даже если там такой функциональности нет, можно ее легко добавить и закомитить в проект. В качестве бонуса получишь работу с LZMA.

Автор: knkd
Дата сообщения: 10.04.2011 19:54

Цитата:
zlib это формат gzip, а не zip

Так ведь сжатие то DEFLATE. Или там разный дефлейт?


Цитата:
Вообще, лучше не изобретать велосипед, а воспользоваться, например, либой 7z

Тащить мегабайты системно-зависимого кода в простую программку?


Цитата:
Даже если там такой функциональности нет, можно ее легко добавить



Добавлено:
Но разного DEFLATE там быть не может.
Потому как libzip и minizip основаны именно на zlib.

Значит я просто что-то делаю не так.
Автор: dmka
Дата сообщения: 10.04.2011 23:31

Цитата:
Так ведь сжатие то DEFLATE. Или там разный дефлейт?

deflate тот же, но это не единственный алгоритм, который может использоваться в zip-е


Цитата:
Тащить мегабайты системно-зависимого кода в простую программку?

Мегабайты и мегагерцы стремительно дешевеют, а часы работы программиста дорожают, да и вообще я бы предпочел стабильно работающий и поддерживаемый код, самописному, но меньшего размера. Что касается системной зависимости - порты 7zip есть практически под все платформы.


Цитата:

ну если ты смог разобраться как прочитать хедер zip-а, то я какбэ не сомневаюсь, что у тебя получится
Автор: knkd
Дата сообщения: 10.04.2011 23:43

Цитата:
ну если ты смог разобраться как прочитать хедер zip-а, то я какбэ не сомневаюсь, что у тебя получится

Зря. Я не программист, а инженер. Разбираться в простынях чужого кода не умею


Цитата:
deflate тот же, но это не единственный алгоритм, который может использоваться в zip-е

Мне нужен именно он.
Так как я указал сжатие deflate при создании архива и локалхидеры это подтверждают (параметр сжатия == 8), то я имею дело именно с deflate сжатием.
И всё равно оно не распаковывается uncompress-ом


Цитата:
Что касается системной зависимости - порты 7zip есть практически под все платформы.

Знающие люди говорят, что унутре всё основано на COM, а потом добавлено куча кода для эмуляции COM и чтобы разобраться в этом нужно быть далеко не средним программистом.
Я им верю...

Автор: dmka
Дата сообщения: 11.04.2011 00:42

Цитата:
И всё равно оно не распаковывается uncompress-ом

Вот посмотри этот код, может выкусишь оттуда кусок. Как на мой беглый взгляд написано кривенько, но это как раз то, к чему ты упорно стремишься


Цитата:
Знающие люди говорят, что унутре всё основано на COM

"знающие люди" путают 7zip с zip folders (zip, который встроен в Windows). В последнем таки да.
Автор: knkd
Дата сообщения: 11.04.2011 00:59

Цитата:
"знающие люди" путают 7zip с zip folders

Неа.


Цитата:
Вот посмотри этот код

Спасибо, посмотрю.
Автор: karakurt2
Дата сообщения: 11.04.2011 16:40
knkd, а пример то из каталога zlib-1.2.3\contrib\minizip смотрели?
Автор: knkd
Дата сообщения: 11.04.2011 21:35
Смотрел...
Там страшно
Автор: knkd
Дата сообщения: 12.04.2011 21:25
Там не просто страшно - через такое нагрормождение макросов, мне просто не пробиться...

Страницы: 1

Предыдущая тема: GridChartView помогите!!!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.