Функция _FO_FolderSearch

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


_FO_FolderSearch

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

#Include <FileOperations.au3>
_FO_FolderSearch ( $sPath[, $sMask = '*' [, $fInclude=True [, $iDepth=0 [, $iFull=1 [, $iArray=1 [, $sLocale=0]]]]]] )

Параметры

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

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

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

Примечания

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

Используйте функцию _FO_CorrectMask для исправления ошибок ввода маски пользователем.
Для удобства в GUI в качестве разделителя в маске можно использовать другой символ, например ";" или "," но при передаче маски в функцию необходимо заменить его на "|". Или использовать функцию Opt("GUIDataSeparatorChar", Chr(1)), чтобы установить иной разделитель для элемента Combo в GUI.
Невозможно создать глубину вложенности каталогов более 125, так как длина пути не должна превышать 256 символов, указываю это чтобы устранить сомнения.
Для файловой системы NTFS результат является сортированным в цифро-алфавитном порядке, но всё же не соответствует в точности сортировке как в проводнике, если в именах файлов используются спец-символы. Для FAT32 результат полностью не сортированный.

См. также

_FO_CorrectMask, _FO_FileSearch

Пример

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

; Папки
;=======================================
; все папки в папке WINDOWS в виде массива
$timer = TimerInit()
$aFolderList = _FO_FolderSearch(@SystemDir, '', True, 125)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
_ArrayDisplay($aFolderList, $timer & ' - все папки')
;=======================================
; все папки в папке WINDOWS в виде массива, относительные пути, уровень 1
$timer = TimerInit()
$aFolderList = _FO_FolderSearch(@SystemDir, '*', True, 1, 0)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
_ArrayDisplay($aFolderList, $timer & ' - все папки')
;=======================================
; корневые папки в папке WINDOWS в виде сообщения
$timer = TimerInit()
$sFolderList = _FO_FolderSearch(@UserProfileDir, '*', True, 0, 0, 0)
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
MsgBox(0, $timer & ' - относительные пути', $sFolderList)
;=======================================

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