Zip.Extract

Zip.Extract ( string ZipFile,
table Files,
string Destination,
boolean Recurse = true,
boolean UseInternalFolders = true,
string Password = "",
number Overwrite = 0,
function CallbackFunction = nil )
Примеры

Описание

Извлекает файлы из Zip архива.

Параметры

ZipFile

(строка) Полный путь и имя файла архивного Zip файла.

Files

(таблица) Таблица, содержащая список файлов для извлечения. Для извлечения всех файлов из Zip архива используем {"*.*"}.

Примечание: Также в таблице можно использовать подстановочные знаки * and ?, для извлечения множества файлов.

Destination

(строка) Путь к папке, куда будут извлекаться файлы.

Recurse

(логический) Делать ли рекурсию в подпапках при поиске файлов для извлечения:

ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
trueДелать рекурсивный обход вложенных папок при извлечении файлов. (По умолчанию)
falseНе делать рекурсию во вложенных папках.

Примечание: Это прежде всего полезно при использовании подстановочных знаков в извлекаемых файлах.

UseInternalFolders

(логический) Восстанавливать ли внутреннюю структуру файлов при извлечении из Zip файла:

ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
trueВнутренняя структура файлов будет восстановлена. (По умолчанию)
falseВнутренняя структура файлов будет проигнорирована и все файлы будут извлечены в корень папки назначения.

Password

(строка) Пароль, требующийся для извлечения файлов из Zip файла. (Этот параметр дополнительный и нужен только если Zip файл защищен паролем. Если пароль не требуется, этот параметр просто остается пустым.)

Overwrite

(число) Следует ли переписывать уже существующие в папке назначения файлы, при извлечении. Выбор из:

КОНСТАНТА
CONSTANT
ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
ZIP_OVERWRITE_NEVER0Не переписывать никаких файлов. (По умолчанию)
ZIP_OVERWRITE_NEWER1Переписывать файл, только если извлеченный более новый.
ZIP_OVERWRITE_ALWAYS2Переписывать все существующие файлы на те, что были извлечены.

CallbackFunction

(функция) Имя функции, которая будет вызываться всякий раз, когда происходит процесс извлечения файла из Zip архива. (Эту возвращающуюся функцию можно использовать для отображения прогресса извлечения каждого файла, своим собственным способом.)

Примечание: Если CallbackFunction установлена как nil, тогда информация о протекании процесса будет отправлена во встроенное диалоговое окно состояния, предполагая что оно в настоящий момент видимое. (Можно показать или скрыть диалоговое окно состояния действиями StatusDlg.Show или StatusDlg.Hide соответственно.)

Возвращающаяся функция должна иметь возможность получать следующие параметры:

String

(строка) Полный путь назначения и имя файла, извлекаемого в настоящий момент из Zip архива.

Percent

(число) Процент выполнения, соответствующий текущему файлу или общему действию.

Status

(число) Состояние текущего сообщения обратного вызова. Может быть или ZIP_STATUS_MAJOR (значение 0) или ZIP_STATUS_MINOR (значение 1). ZIP_STATUS_MAJOR обозначает, что возврат соответствует прохождению процесса действия в целом. ZIP_STATUS_MINOR обозначает, что возврат соответствует прохождению процесса действия текущего файла. Возвращающая функция должна возвращать логическое значение (истина (true) или ложь (false)), показывающее следует ли продолжать извлечение Zip файла:

ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
trueПродолжить извлечение из Zip файла.
falseОстановить извлечение Zip файла, как только станет возможно.

Возврат

Ничего. Можно использовать Application.GetLastError для определения случился ли отказ в работе этого действия и почему.
Смотрите также: Связанные действия

Примеры

Пример 1

Zip.Extract("AutoPlay\\Docs\\graphics.zip", {"*.*"}, "C:\\Graphics", true, true, "", 3, nil);
Извлекает все файлы из Zip файла по имени "graphics.zip" в папку "C:\Graphics" системы пользователя. Если любой из файлов уже имеется в папке назначения, он будет переписан.

Пример 2

-- Allow the user to select a directory to unzip the files.
-- Позволяем пользователю выбрать директорию для распаковки файлов.
target_folder = Dialog.FolderBrowse("Select a Folder", "C:\\");

-- Check to see if the user cancelled or an error occurred.
-- Смотрим, не отменил ли действие пользователь и не произошла ли ошибка.
if (target_folder ~= "CANCEL") and (target_folder ~= "") then
    -- Gets a list of the contents of a zip file.
    -- Получаем список содержимого zip файла.
    zip_contents = Zip.GetContents("AutoPlay\\Docs\\Info.zip", true);

    -- Get the error code of the last action.
    -- Получаем код ошибки для последнего действия.
    error = Application.GetLastError();

    -- If an error occurred, display the error code message.
    -- Если случилась ошибка, показываем сообщение с кодом ошибки.
    if (error ~= 0) then
        Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
    else
        -- Take the table and turn it into a string with newlines for displaying.
        -- Берем таблицу и превращаем её в строку, показывая каждый элемент с новой строки.
        zip_contents_display = Table.Concat(zip_contents, "\r\n", 1, TABLE_ALL);

        -- Ask the user if they are sure they would like to unzip the contents.
        -- Спрашиваем пользователя, уверен ли он, что хочет распаковать содержимое.
        result = Dialog.Message("Information", "The following files will be unzipped:\r\nClick the Cancel button to abort the process.\r\n\r\n" .. zip_contents_display, MB_OKCANCEL)

        -- If the user clicked Ok, unzip the files.
        -- Если пользователь кликает Ok, распаковываем файлы.
        if (result == IDOK) then
            -- Show the status dialog.
            -- Показываем диалоговое окно состояния.
            StatusDlg.Show();
            -- Extract the contents of the Zip file.
            -- Извлекаем содержимое Zip файла.
            Zip.Extract("AutoPlay\\Docs\\Info.zip", {"*.*"}, target_folder, true, true, "", ZIP_OVERWRITE_NEVER, nil);

            -- Check the error code for the last action.
            -- Проверяем код ошибки последнего действия.
            error = Application.GetLastError();

            -- Hide the status dialog.
            -- Скрываем диалоговое окно состояния.
            StatusDlg.Hide();

            -- If an error occurred, display the error code message.
            -- Если случилась ошибка, показываем сообщение с кодом ошибки.
            if (error ~= 0) then
                Dialog.Message("Errror", tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
            else
                Dialog.Message("Success", "The unzipping was successful.", MB_OK, MB_ICONINFORMATION);
            end
        end
    end
end
В этом примере вначале пользователю предлагается выбрать папку при помощи действия Dialog.FolderBrowse. Эта папка будет использоваться для распаковки в нее файлов. Затем пользователю представляется диалоговое окно, содержащее имена файлов, которые будут распакованы и разрашается прервать процесс. Если пользователь кликает по кнопке Ok, файлы распаковываются в выбранную папку. По окончании процесса будет дано уведомление об успешном или нет прохождении процедуры.
Смотрите также: Связанные действия