Folder.Find

table Folder.Find ( string StartFolder,
string Folder,
boolean Recurse = false,
function CallbackFunction = nil )
Примеры

Описание

Поиск папок в локальной системе.

Параметры

StartFolder

(строка) Путь к папке, в которой нужно искать.

Folder

(строка) Имя папки, которую нужно искать. Для поиска папок, что соответствуют указанному шаблону, в этом поле можно использовать подстановочные знаки * и ?.

Recurse

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

ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
trueРекурсия.
falseНет рекурсии. (По умолчанию)

CallbackFunction

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

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

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

CurrentPath

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

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

Возврат

ResultVariable

(таблица) Таблица, содержащая пути ко всем найденным папкам. Если нет найденных папок или происходит ошибка, возвращается значение nil. Можно использовать Application.GetLastError для определения случился ли отказ в работе этого действия и почему.

При добавлении действия из редактора скрипта, можно использовать это поле для определения переменной, которая возвращает значение, сохраняющееся в ней.
Смотрите также: Связанные действия

Примеры

Пример 1

ImageFolders = Folder.Find(_SourceFolder, "*Images*", true, ShowSearchProgress);
Поиск всех папок, в имени которых содержится "Images", внутри папки, откуда запущено приложение и сохраняем их пути в таблице по имени ImageFolders. Поскольку параметр Recurse установлен как истина (true), действие будет вести поиск внутри вложенных папок. Функция по имени ShowSearchProgress будет вызываться всякий раз, когда будет выполняться операция поиска.

Пример 2

found = Folder.Find( Shell.GetFolder(SHF_MYDOCUMENTS), "Plant Data", false);
if (found) then
    Dialog.Message("Found one!", "The first folder found was:" .. found[1]);
end
Поиск всех папок по имени "Plant Data", в корне пользовательской папки Мои документы и сохраняем их пути в таблице, названной "found". Затем в примере проверяем эту таблицу, чтобы узнать, есть ли в ней какие-либо найденные папки, (если их нет, таблица была бы установлена в ноль действием Folder.Find) и если есть, показываем диалоговое окно сообщения, чтобы показать путь к первой найденной папке.

Пример 3

-- Set the callback function (used by action Folder.Find)
-- Устанавливаем возвращающуюся функцию (используемую действием Folder.Find)
function FindCallBack(CurrentFolder)
    -- Show the cancel button
    -- Показываем кнопку Отмена ( cancel)
    StatusDlg.ShowCancelButton(true, "Cancel");
    -- Set the status dialog title, message, and status text
    -- Задаем название диалогового окна состояния, сообщение и текст состояния
    StatusDlg.SetTitle("Searching . . . ");
    StatusDlg.SetMessage("Please wait.     Search is in progress.");
    StatusDlg.SetStatusText("Current Folder: " .. CurrentFolder);
    -- Check if the user pressed cancel
    -- Проверяем, не нажал ли пользователь кнопку Отмена (cancel)
    cancel = StatusDlg.IsCancelled();
    if cancel then
    -- Cancel was pressed, stop the current operation
    -- Кнопка Отмена нажата, останавливаем текущую операцию
        return false;
    else
    -- Cancel was not pressed, continue
    -- Кнопка Отмена не нажата, продолжаем
        return true;
    end
end

-- Set the drive to search
-- Задаем диск для поиска
drive = "c:\\";
-- Set the folder to search for
-- Задаем папку, которую будем искать
folder = "windows";
-- Search the specified drive for folders named "windows"
-- Display the status dialog
-- Поиск папки по имени "windows" на указанном диске
-- Показываем диалоговое окно состояния
StatusDlg.Show(0, false);
search_results = Folder.Find(drive, folder, true, FindCallBack);
-- Check to see if an error occurred during the search. If it did, display the error message.
-- Проверяем, не было ли ошибки при поиске. Если была, показываем сообщение об ошибке.
error = Application.GetLastError();
StatusDlg.Hide();
if error ~= 0 then
    Dialog.Message("Error", _tblErrorMessages[error]);
else
    -- If no directories were found, inform the user
    -- Если нет найденных папок, информируем пользователя
    if (search_results == nil) then
        Dialog.Message("Notice", "There are no folders named '" .. folder .. "' on drive '" .. drive .. "'.");
    -- If folders were found, display a dialog containing a list of their locations.
    -- Если папки были найдены, показываем диалоговое окно, содержащее список их размещения.
    else
        message = "A folder named '" .. folder .. "' was found at the following location(s):\r\n\r\n";
        for index, path in pairs(search_results) do
            message = String.Concat(message, path .. "\r\n");
        end
        Dialog.Message("File Search Results", message, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
    end
end
В этом примере используется действие Folder.Find для поиска всех экземпляров определенной папки на жестком диске пользователя. Как только поиск завершится, пользователю предоставляется список всех найденных путей. Возвращающаяся функция используется для настройки "види" диалогового окна состояния.
Смотрите также: Связанные действия