Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ZIP для домохозяек
Форум на CrossPlatform.RU > Разработка > С\С++
Majestio
Не так давно я написал архиватор ZIP на PHP (нужда возникла чисто из за ограничений бесплатного хостинга - по памяти, выделяемой процессу, и по макс. размеру файла на хостинге). Сама реализация получилась так, что и самому понравилась - сделал ее так сказать адаптивной.

Алгоритм следующий:

1) (опционально) Если файл имеет расширение слабо пакуемых или непакуемых файлов, типа -
'7z','a00','a01','a02','ace','ain','alz','apz','ar','arc','arh','ari','arj','ark','axx','b64','ba','bh','bhx','boo','bz','bz2','bza','bzip','bzip2','c00','c01','c02',
'cab','car','cb7','cbr','cbz','cp9','cpt','dd','deb','dgc','dist','djvu','dl_','dz','ecs','efw','epi','ex_','f','fdp','gca','gif','gz','gza','gzi','gzip','ha','hbc','hbc2',
'hbe','hki','hki1','hki2','hki3','hpk','hyp','ice','ipg','ipk','ish','ita','j','jar.pac','jgz','jic','jpeg','jpg','kgb','lbr','lemon','lha','lnx','lqr','lz','lzh','lzma','lzo',
'lzx','md','mou','mzp','oar','oz','p7m','pack.gz','package','pae','pak','paq6','paq7','paq8','par','par2','pbi','pcv','pea','pet','pf','pim','pit','piz','pkg','png','pup',
'pup','puz','qda','r0','r00','r01','r02','r03','r1','r2','r21','r30','rar','rev','rk','rnc','rp9','rpm','rte','rzs','s00','s01','s02','sar','sdn','sea','sen','sfs','sfx',
'sh','shar','shr','sit','sitx','spt','sqx','sqz','tar','tar.gz','tar.xz','taz','tbz','tbz2','tg','tgz','tlz','tlzma','tsk','txz','tz','uc2','uha','vem','vsi','wad','war',
'wot','xef','xez','xmcdz','xpi','xx','xz','y','z','z01','z02','z03','z04','z05','z06','z07','z08','z09','zap','zi','zip','zipx','zix','zl','zoo','zpi','zz'
выбирается метод STORE
2) Иначе файл сперва жмется методом DEFLATE, потом BZIP2
3) В результирующий архив попадают сжатые данные у которых размер получается меньше
4) Алгоритму можно задавать предельные размеры использования памяти и размеры томов результирующего архива

Хочу это переписать под Qt.

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

Мои ZIP-ы нормально читает только 7z. WinRAR, открывая архивы со смешанными методами сжатия файлов - на файлы сжатые по BZIP2 кричит "неизвестный метод сжатия". Почитав стандарт, я вроде не нашел запрета на BZIP2 в явном виде.

Вот и не решаюсь тратить время - если это все же в пределах стандарта, тогда смысл есть.
А если всеж нарушение и это новодел - думаю забросить это.

Какие мысли есть по этому поводу?
Интересно все.
Iron Bug
"стандарта" на пакование нет вообще. просто есть разные реализации, свободные и коммерческие, известных алгоритмов. Rar действительно не работает с линюксовыми форматами упаковки. не могу сказать, по какой причине. просто не хотят. формат открытый, никому не запрещается с ним работать.
самый понятный для всех осей - простой zip.
из вендозных универсальных софтин самый популярный - 7z. в линюксе - куча разных отдельных утилит и их комбинаций.

из моей практики самый мощный упаковщик - LZMA. но он редко где применяется, ибо небыстр. встречаются его комбинации с другими форматами.
Litkevich Yuriy
Цитата(Majestio @ 21.11.2013, 16:22) *
Хочу это переписать под Qt.
в Qt уже встроена библиотека архивирования zlib.
Доступ можно получить через функцию:
QByteArray qCompress ( const QByteArray & data, int compressionLevel = -1 )
и связанные с ней.

Majestio
Litkevich Yuriy, немного не так - данная функция реализует метод сжатия DEFLATE, но не работу с архивами.

Функций для работы с zip-архивами в Qt API нет. Это обходится использованием недокументированных QZipReader/QZipWriter.
Однако последние, как я понял, кроме DEFLATE больше ничего не умеют.

А вот использование BZIP2 оправдано - т.к. часто работает заметно эффективнее DEFLATE.
Есть еще один метод - DEFLATE64, по описанию тоже хорош, но я его не пробовал, просто удостоверился что сорцы доступны.

Хотя в перспективе есть еще относительно новые и эффективные медоды, например ZPAQ. По идее, поле для экспериментов обозримо. И нормальная либа для работы с архивами, с хорошими методами сжатия, как я понял - актуальна.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.