function ISArcExtract (CurComponent:
Cardinal; PctOfTotal:
double; InputFile, OutputPath, ExtractedPath:
string; DeleteInFile:
boolean; Password, CfgFile, WorkPath:
string; ExtractPCF:
boolean):
boolean;
распаковывает arc архив(ы), заданный(ые) папкой и именем файла в
InputFile, в каталог, указанный в
OutputPath.
ExtractedPath - используется для распаковки части архива. Указывается имя папки, которая будет извлечена. Если данная фитча не требуется, то оставляйте данный параметр пустой строкой. Значение '*' распаковывает весь архив с последующим извлечением всех подкаталогов из корневых папок архива (мож кому понадобится);
CfgFile - путь и имя конфигурационного файла (arc.ini). Требуется для распаковки .arc архивов, созданных с использованием внешних компрессоров;
WorkPath - рабочий путь для распаковки временных файлов freearc'ом. Если при распаковке архива freearc создает большие темп-файлы (обычно это происходит если используются внешние компрессоры), то рекомендуется устанавливать рабочую папку в {app}, а то у пользователя может не быть места на системном диске, куда по умолчанию freearc пытается поместить темп-файл;
Password - пароль для распаковки архива(ов);
ExtractPCF - может иметь значение true или false. При распаковке FreeArc архива определяет будут ли распаковываться .pcf файлы "на лету". При активации данного режима при извлечении из .arc архива для каждого распакованного файла с расширением .pcf будет запускаться precomp, извлекающий данные из этого файла в ту же папку, и после удаляющий исходный. По идее данный режим должен увеличить скорость распаковки FreeArc архивов, содержащий много небольших pcf файлов, потому как сразу после извлечения одного из них, пока он еще будет находиться в кэше винды, можно быстренько его обработать precomp'ом, с минимальным обращением к винчестеру. Но на практике у меня получалось иначе, по крайней мере на XP (возможно на Win7 такой способ и выиграет стандартный 7z(без сжатия)+precomp+freearc).
В скрипте для параметра
ExtractPCF применены константы
notPCFonFLY и
PCFonFLY - это на самом деле просто соответственно
false и
true. Применение таких констант позволит избежать путаницы с другим подобным параметром в функции распаковки arc-архивов - удалением входного архива (
DeleteInFile).
Например:
if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}\data'), '', false, 'Password', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY) then break;
распаковывает все архивы с расширением .arc из папки {src} (сканировать подкаталоги или нет задается в функции инициализации поиска FileSearchInit) в папку {app}\data\ без удаления исходного файла, с ручным распределением процентов (без тестового прогона, распределение происходит по размерам исходных архивов), паролем «Password», файлом конфигурации {tmp}\arc.ini и рабочей папкой в {app}, без извлечения .pcf файлов "на лету".