Функция _FO_FileSearch

         Описание функции


_FO_FileSearch

Возвращает список файлов в указанном каталоге.

#Include <FileOperations.au3>
_FO_FileSearch ( $sPath [, $sMask = '*' [, $fInclude=True [, $iDepth=125 [, $iFull=1 [, $iArray=1 [, $iTypeMask=1 [, $sLocale=0[, $vExcludeFolders = ''[, $iExcludeDepth = -1]]]]]]]]] )

Параметры

$sPath Путь поиска
$sMask [необязательный] Маска, в зависимости, от параметра $TypeMask может быть либо полная с использованием символов "*" и "?" (по умолчанию), либо с указанием расширения файлов. В качестве разделителя используется символ "|". По умолчанию '*' - найти все файлы
$fInclude [необязательный] Включить или исключить указанные в маске
    True - найти указанные в маске (по умолчанию)
    False - найти все кроме указанных в маске
$iDepth [необязательный] Глубина вложенности каталогов (0 - корневой каталог, 125 - по умолчанию)
$iFull [необязательный] Пути в возвращаемых данных
    0 - относительный
    1 - (по умолчанию) полный путь
    2 - имена файлов с расширением
    3 - имена файлов без расширения
$iArray [необязательный] Определяет вывод результата, массив или список
    0 - список с разделителем @CRLF
    1 - (по умолчанию) массив, в котором $array[0]=количество файлов
    2 - массив, в котором $array[0] содержит первый файл
$iTypeMask [необязательный] Тип маски
    0 - автоопределение типа маски 1 или 2
    1 - (по умолчанию) принудительно использовать маску вида *.is?|s*.cp* (то есть можно указать имя файла без символов * или ? и без расширения и будет найдено)
    2 - принудительно маска вида tmp|bak|gid (по расширению, то есть только файлы с указанным расширением). Параметр $sLocale в этом случае игнорируется.
$sLocale [необязательный] Учитывать регистр букв при поиске.
    -1 - Не учитывать регистр только для латинских букв
    0 - (по умолчанию) Не учитывать регистр, (для всех символов).
    1 - Учитывать регистр (для всех символов).
    <символы> - не учитывать регистр указанного диапазона символов локального языка, включая латинские, например 'А-яЁё'. Латинские указывать не требуется, они по умолчанию включены.
$vExcludeFolders [необязательный] Исключает папки из поиска. Перечислять имена папок через "|", например "имя1|имя2|имя3".
$iExcludeDepth [необязательный] Уровень вложенности, до которого работает исключение, указанное в параметре $vExcludeFolders. Обычно 0 - для корневой папки. По умолчанию -1, что означает отключено.

Возвращаемое значение

Успех:Возвращает список файлов.
Ошибка:Возвращает пустую строку и устанавливает @error:
@error:1 - неверный путь
2 - неверная маска
3 - ничего не найдено

Примечания

В обязательном порядке проверяйте @error, так как при отсутствии найденных файлов использование массива приводит к ошибке, которая может быть не выявлена при тестах.

Используйте функцию _FO_CorrectMask для исправления ошибок ввода маски пользователем.
Нельзя использовать смешанную маску. Если включено автоопределение ($iTypeMask=0), то при наличии хотя бы одного из этих трёх символов "*.?" в маске включается $iTypeMask=1, иначе $iTypeMask=2.
Для удобства в GUI в качестве разделителя в маске можно использовать другой символ, например ";" или "," особенно при использовании $iTypeMask=2, но при передаче маски в функцию необходимо заменить его на "|". И как вариант можно использовать функцию Opt("GUIDataSeparatorChar", Chr(1)), чтобы установить иной разделитель для элемента Combo в GUI.
Невозможно создать глубину вложенности каталогов более 125, так как длина пути не должна превышать 260 символов, указываю это чтобы устранить сомнения. Чтобы обрабатывать длинные пути добавьте в начало пути \\?\, например "\\?\D:MyFolder"
Для файловой системы NTFS результат является сортированным в цифро-алфавитном порядке, но всё же не соответствует в точности сортировке как в проводнике, если в именах файлов используются спец-символы. Для FAT32 результат полностью не сортированный.

См. также

_FO_CorrectMask, _FO_FolderSearch

Пример

; AZJIO
; http://www.autoitscript.com/forum/topic/133224-filesearch-foldersearch/
#include <Array.au3> ; для _ArrayDisplay
#include <FileOperations.au3>

; Файлы
;=======================================
; все файлы папки WINDOWS в виде массива
$timer = TimerInit()
$aFileList = _FO_FileSearch(@WindowsDir)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
_ArrayDisplay($aFileList, $timer & ' - все файлы')
;=======================================
; только файлы exe и dll папки WINDOWS в виде списка
$timer = TimerInit()
$sFileList = _FO_FileSearch(@WindowsDir, 'exe|dll', True, 0, 1, 0, 0)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
MsgBox(0, $timer & ' - exe;dll', $sFileList)
;=======================================
; все файлы, кроме exe и dll папки WINDOWS в виде списка с относительными путями
$timer = TimerInit()
$sFileList = _FO_FileSearch(@WindowsDir, 'exe|dll', False, 0, 0, 0, 0)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
MsgBox(0, $timer & ' - кроме exe|dll, относит. пути', $sFileList)
;=======================================
; все файлы, кроме exe и dll папки WINDOWS в виде списка с именами файлов без расширения
$timer = TimerInit()
$sFileList = _FO_FileSearch(@WindowsDir, 'exe|dll', False, 0, 3, 0, 0)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
MsgBox(0, $timer & ' - кроме exe|dll, имя без расширения', $sFileList)
;=======================================
; только файлы tmp и bak и gid папки WINDOWS в виде массива с относительными путями, массив без указания количества файлов
$timer = TimerInit()
$aFileList = _FO_FileSearch(@WindowsDir, 'tmp|bak|gid', True, 125, 0, 2, 0)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
_ArrayDisplay($aFileList, $timer & ' - tmp|bak|gid, относит. пути, первый эл. файл')
;=======================================
; только файлы tmp и bak и gid папки WINDOWS в виде массива с именами файлов c расширения
$timer = TimerInit()
$aFileList = _FO_FileSearch(@WindowsDir, 'tmp|bak|gid', True, 125, 2, 2, 0)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
_ArrayDisplay($aFileList, $timer & ' - tmp|bak|gid, имена с расширением')
;=======================================
; Недопустимый символ в пути
$aFileList = _FO_FileSearch('C:\WIN>DOWS', '*')
If @error Then
    MsgBox(0, 'Ошибка', 'Код ошибки: ' & @error)
    ; Exit
EndIf
;=======================================
; только файлы по маске *.is?|s*.cp* папки WINDOWS в виде массива
$timer = TimerInit()
$aFileList = _FO_FileSearch(@WindowsDir, '*.is?|s*.cp*')
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
_ArrayDisplay($aFileList, $timer & ' - *.is?|s*.cp*')
;=======================================
; только файлы по маске shell*.*;config.* папки WINDOWS в виде массива
$timer = TimerInit()
$aFileList = _FO_FileSearch(@WindowsDir, 'shell*.*|config.*')
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
_ArrayDisplay($aFileList, $timer & ' - shell*.*|config.*')
;=======================================
; только файлы exe и dll папки WINDOWS в массив с помощью регулярного выражения
$timer = TimerInit()
$sFileList = _FO_FileSearch(@WindowsDir, '*', True, 125, 1, 0)
$aFileList = StringRegExp($sFileList, '(?mi)^(.*\.(?:exe|dll))(?:\r|\z)', 3)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' sec'
_ArrayDisplay($aFileList, UBound($aFileList) & ' - ' & $timer & ' - RegExp')
;=======================================

; Папки и файлы
;=======================================
; папки и файлы в корне каталога WINDOWS, вывод в виде сообщения
$sList = _FO_FolderSearch(@WindowsDir & '\Web', '*', True, 0, 0, 0) & @CRLF & _FO_FileSearch(@WindowsDir & '\Web', '*', True, 0, 0, 0)
MsgBox(0, 'папки и файлы', $sList)
;=======================================