LINUX.ORG.RU

cpp zip library/header

 , ,


0

1

киньте годную библиотеку для распаковки zip, можно и просто набор классов в одном .h файле, можно враппер вокруг zlib, главное не на си посему minizip отпадает.

пока что нашел picounzip.

★★★★★
Ответ на: комментарий от invy

тем что это библиотека для работы с deflate сжатием, а не zip файлами.

bhfq ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

libzip это морда к zlib написанная на си, не с++, там распаковка будет выглядеть как строчек тридцать на си с выделением и очисткой памяти вручную.

picounzip - распаковка в 2 строки.

bhfq ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Угу я так уже и понял после двух дней изгугления. Остается только довести до ума picounzip, сделать проверку на ../ в путях.

А еще есть https://github.com/KDE/karchive который вроде как отвязан от KDE но не известно на 100% ли. Правда как и любая KDE библиотека KArchive напичкан qDebug и нет нормальной работы с ошибками.

Мне можно и для Qt, но QuaZIP это ужас. Есть QZip написанный Nokia и давно заброшенный, но не известно есть ли там поддержка zip64.

bhfq ★★★★★
() автор топика
Последнее исправление: bhfq (всего исправлений: 1)

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

в zlib есть contrib, в contrib есть minizip, который вероятно делает то, что ты хочешь. любая библиотека на си подойдёт для с++.

anonymous
()
Ответ на: комментарий от anonymous

в твоих интересах взять нормальную библиотеку

Но он ясно дал понять, что не хочет делать нормально.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

У нас разные понятия нормального.

В С++ можно использовать нормально wrapper над zlib, где за тебя уже сделали все выделение/освобождение памяти и работу с ФС, обработку ошибок, возможно потокобезопасность, RAII, и желательно без мьютексов, кроссплатформлено ведь так? А не реализовывать все это самому вручную используя zlib для deflate/deflate64.

bhfq ★★★★★
() автор топика
Ответ на: комментарий от bhfq

ты бы хоть посмотрел на минизип. тебе не приходило в голову, что ты наверное не первый человек который задаётся этим вопросом? если ты не можешь найти, то ты либо ищешь не там, либо не то. может посмотришь как другие приложения с открытыми исходниками работают с зип-архивами и сделаешь так же?

anonymous
()
Ответ на: комментарий от anonymous

как другие приложения с открытыми исходниками работают с зип-архивами

используют позорище под названием libarchive.

если бы все были довольны minizip, то не появились бы quazip, zipper.

если бы все были довольны libzip, то не появились бы libzippp, libzip++.

вот только minizip, libzip это все библиотеки к zlib и они на си.

bhfq ★★★★★
() автор топика
Ответ на: комментарий от bhfq

если бы все были довольны minizip, то не появились бы quazip, zipper.

ну вот, достаточно же было погуглить «minizip c++».

ну а что ты хотел, ещё не все довольны зиппером например, тут же не стол заказов. минизип делает то, что ты хочешь, остальное - на сколько хватит полёта фантазии.

anonymous
()

Как вариант, когда-то давно использовал OSDAB-zip. Qt и GPL. Давно не обновлялось и что-то мне в нём не нравилось, но не помню подробностей.

xaizek ★★★★★
()

minizip. Хотя это конечно про C, а не C++. Поддержка путей в UTF-8 на Windows, автоматическая конвертация атрибутов файлов между UNIX и Windows. Нет распараллеливания.

dvetutnev
()
Последнее исправление: dvetutnev (всего исправлений: 1)

Короче забил на библиотеки. Взял picounzip. Пересмотрел его функции extractall и extract. И просто написал свой extractall с вызовом extract в цикле for entrylist.

QuaZIP и libzip вынуждают писать свой код для распаковки архива полностью с директориями, вручную считаться с ошибками, в общем дермище для единичной полной распаковки.

Karchive сборка cmake напичкана не нужными скриптами типа ECM. Подозреваю что если не пользоваться их простым методом copyTo то говнокодить там придется ровно как и c QuaZIP.

И еще. Ark из KDE использует libzip насколько я понял плагином. https://github.com/KDE/ark/blob/master/plugins/libzipplugin/libzipplugin.cpp#L579 и насколько я смог проверить этот код, на 120мб архиве с 3600 файлами, там утечки по памяти на тесте до 200мб. Правда в самом линуксе не проверял сам Ark. Если есть желающие то проверить просто. Сожмите весь ваш /usr/include каким-нибудь zip в консоли и распакуйте хоть куда Арком, что по памяти?

bhfq ★★★★★
() автор топика
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от bhfq

Сожмите весь ваш /usr/include каким-нибудь zip в консоли и распакуйте хоть куда Арком, что по памяти?

Правильнее будет сделать так.

  1. в Ark отключить все плагины кроме libzip.
  2. скачать (919мб) архив https://download.qt.io/official_releases/qt/5.15/5.15.0/single/qt-everywhere-src-5.15.0.zip
  3. открыть его в Ark и распаковать.
  4. наслаждаться в htop ростом используемой Арком памяти.
bhfq ★★★★★
() автор топика
Последнее исправление: bhfq (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.