Поясните новичку про pzlib и алгоритмы сжатия...

NicTon

Новичок
Здравствуйте!

Поясните, пожалуйста, новичку где брать pzlib и всю "обвязку" для него остальные библиотеки и что прописывать в батнике?

Я взял отсюда:

http://krinkels.org/threads/pzlib_v2-3-versus-reflate.3290/

Что можно тут использовать и что поменять в батниках и arc.ini?
 

L-e-o-N

Старожил
arc.ini
[External compressor:pzlib]
header = 0
packcmd = pzlib e -m2 -x -s -r9 -t100p -st100p -ct100p - -o - <stdin> <stdout>
unpackcmd = pzlib d -t100p - -o - <stdin> <stdout>
в батнике параметр -m... изменить на -mpzlib+...
 

Вложения

NicTon

Новичок
arc.ini
[External compressor:pzlib]
header = 0
packcmd = pzlib e -m2 -x -s -r9 -t100p -st100p -ct100p - -o - <stdin> <stdout>
unpackcmd = pzlib d -t100p - -o - <stdin> <stdout>
в батнике параметр -m... изменить на -mpzlib+...

Здравствуйте! А поподробнее, что и как менять, что за что отвечает? Использовать ли эти "инструменты", и "тот метод" что в архиве той темы или скачивать какие-то другие?

И самое главное, как потом это распаковать, как "вручную", так и в Inno Setup?

Простой пример скрипта и алгоритмов сжатия можете показать?

Спасибо.
 

L-e-o-N

Старожил
Здравствуйте! А поподробнее, что и как менять, что за что отвечает? Использовать ли эти "инструменты", и "тот метод" что в архиве той темы или скачивать какие-то другие?

И самое главное, как потом это распаковать, как "вручную", так и в Inno Setup?

Простой пример скрипта и алгоритмов сжатия можете показать?

Спасибо.
arc.ini - [External compressor: pzlib] - Объявление алгоритма
header = 0 - честно говоря сам не знаю зачем этот параметр, но он ставится в каждом внешнем алгоритме
packcmd = pzlib e -m2 -x -s -r9 -t100p -st100p -ct100p - -o - <stdin> <stdout> - Команда упаковки:
e - encode, -m2 - детект deflate streams -x детект reflate и zlib (нужны библиотеки hif2raw_dll.dll, raw2hif_dll.dll), -s - обрабатывает дополнительные данные reflate -r9 - девятка это уровень обработки данных reflate (можно задать любой до 9) -t100p -указывает что для обработки будут использованы 100% ядер процессора (если не указать букву р, то число будет указывать количество потоков для обработки), -st100p -задает количество потоков для сканирования, -ct100p -задает количество потоков для прекомпрессора, - -o - <stdin> <stdout> -задает режим без временных файлов (обработка будет идти совместно с упаковкой данных в архив и обработкой другими алгоритмами), при этом reflate не будет обращатся к жесткому диску, за счет чего упаковка будет проходить быстрее
unpackcmd = pzlib d -t100p - -o - <stdin> <stdout> - команда распаковки (нужно включить в arc.ini который используется isdone), d- decode, остальное уже расписано выше.
Я прикрепил архив к предыдущему моему сообщению, там лежит последняя версия reflate, вместе со своими библиотеками
Когда вы используете команду упаковки (что то вроде arc.exe a ... -msrep+lzma:ultra ... data.bin packetdata/*)
srep и lzma являются такими же алгоритмами и чтобы использовать pzlib все что нужно это дописать pzlib так: -mpzlib+srep+lzma:ultra.
Что касается Inno Setup то распаковка будет идти также через isarcextract.Нужно изменить:
  1. В секцию [Files] нужно добавить:
    1. Source: Files\pzlib.exe; DestDir: {tmp}; Flags: dontcopy
    2. Source: Files\arc.ini; DestDir: {tmp}; Flags: dontcopy (если не существует)
    3. Source: Files\hif2raw_dll.dll; DestDir: {tmp}; Flags: dontcopy
    4. Source: Files\Include\raw2hif_dll.dll; DestDir: {tmp}; Flags: dontcopy
  2. В место распаковки библиотек (обычно в скрипте находится непосредственно перед распаковкой архивов)
    1. ExtractTemporaryFile('pzlib.exe');
    2. ExtractTemporaryFile('arc.ini');(если не существует)
    3. ExtractTemporaryFile('hif2raw_dll.dll');
    4. ExtractTemporaryFile('raw2hif_dll.dll');
  3. И обеспечить нормальную работу инсталятора в случае отмены установки, или возникновения ошибки:
    1. Найти код: if (CurStep=ssPostInstall) and ISDoneError then begin (обычно находится после распаковки архивов)
    2. В следующую строку добавить код: Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM pzlib.exe', '', SW_HIDE, ewWaitUntilTerminated, ISDoneCancel);
  4. В всех ISArcExtract нужно задать путь к arc.ini
    1. if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data.bin'), ExpandConstant('{app}\'), '', false, 'пароль архива(если нет то пустая строка)', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY{PCFonFLY}) then break;
 

zapsip

Участник
L-e-o-N, Здравствуйте.
А что в pZLib дают следующие параметры при кодировании : -b2048 -wm2048 -t8 -s2048 ?

-t8 это количество потоков, в моём случае 8, а остальное ?
 

zapsip

Участник
sergey3695, Благодарю за скорый ответ .
А каков разбег упомянутых вами и мною параметров ?
То есть от скольки и до скольки их можно назначать ?
Или у меня величины уже достигли максимума 2048 ?
 

sergey3695

Ветеран
Модератор
zapsip, насчет этого не знаю. я pzlib не пользуюсь. скорее всего эти параметры уже подобраны оптимально и раз в примере не указано их использование, то и трогать их не стоит.
 

zapsip

Участник
sergey3695, очень приятное чувство юмора :)
SBalykov, Буду пробовать.
Ваши ответы всегда максимально лаконичны и их нельзя больше сократить [без ущерба смысла или действенности] ни на пол-буквы :)
Как крылатые фразы настоящих мудрецов.
Очень приятно получать советы от вас обоих.
 
Сверху