|
ProcessFile должна распаковать нужный файл или тестировать целостность архива.
int __stdcall ProcessFile (HANDLE hArcData, int Operation, char *DestPath, char *DestName);
function ProcessFile(hArcData: THandle; Operation: longint; DestPath, DestName: PChar): longint; stdcall;
Описание
ProcessFile должна возвращать ноль при успешном вызове или один из кодов ошибок при неудачном.
hArcData содержит дескриптор, ранее возвращённый вами в OpenArchive. При его использовании вы сможете получить информацию, которая нужна для распаковки файлов из архива, например имя файла архива.
В отличие от PackFiles, ProcessFile просматривает только одно имя файла. DestName содержит либо полный путь и имя файла и DestPath = NULL, либо DestName содержит только имя файла, а DestPath содержит путь. Сделано для совместимости с unrar.dll.
Когда Total Commander открывает архив в первый раз, он сканирует все имена файлов со значением OpenMode==PK_OM_LIST, поэтому ReadHeader() вызывается в цикле с вызовом ProcessFile(..., PK_SKIP, ...).
Когда пользователь выбирает файл(ы) и начинает их распаковку, Total Commander ещё раз вызывает ReadHeader() в цикле. Для каждого файла, который должен быть распакован, Total Commander вызывает ProcessFile() со значением Operation==PK_EXTRACT сразу после вызова ReadHeader() для этого файла. Если файл должен быть пропущен, ProcessFile() вызывается со значением Operation==PK_SKIP.
Каждый раз DestName содержит имя файла для распаковки, тестирования или пропуска. Чтобы узнать, какую операцию из трёх вы должны применить в текущему файлу в архиве, переменной Operation присваивается одно из следующих значений:
Константа | Значение | Описание
| PK_SKIP | 0 | Пропустить файл (без распаковки)
| PK_TEST | 1 | Тестировать целостность файла
| PK_EXTRACT | 2 | Распаковать файл на диск
|
|