Представленная процедура Delphi ScanDir рекурсивно сканирует директорию и ее поддиректории для файлов, соответствующих указанному маске, и добавляет имена файлов в список.
Разбивка работы:
Процедура принимает три параметра:
StartDir: начальная директория для сканирования
Mask: шаблон имени файла для поиска (по умолчанию - '*.*')
List: список, в который будут добавлены имена файлов, соответствующие маске (потомок TString, например, TStringList)
Процедура сначала проверяет, является ли параметр Mask пустым, и если так, то устанавливает его в значение '*.*'.
Затем она добавляет символ обратной косой черты (\) к параметру StartDir, если он не уже содержит этот символ.
Процедура использует функцию FindFirst для поиска файлов в директории StartDir, соответствующих маске. Если не возникло ошибок, она вступает в цикл, где:
Она обрабатывает сообщения от других приложений (например, обновляет элементы GUI) с помощью Application.ProcessMessages.
Если файл не является директории (т.е., SearchRec.Attr and faDirectory = faDirectory), она добавляет имя файла в список. Если файл является директорий, но не родительская директория (..) или текущая директория (.), она рекурсивно вызывает себя с поддиректорией как новым начальным пунктом.
Цикл продолжается, пока FindNext возвращает 0 (означающее, что больше файлов не было найдено).
Наконец, процедура закрывает поиск handle с помощью FindClose.
Пример кода демонстрирует использование этой процедуры:
Он очищает список элементов (ListBox1) и затем вызывает процедуру ScanDir с параметрами:
Mask: пустая строка (''), что означает поиск всех файлов (по умолчанию - маска '*.*')
List: ListBox1.Items, который является списком строк
После сканирования он устанавливает текст заголовка (Label1) в количество элементов в списке.
В целом, этот код предоставляет удобный способ рекурсивно сканировать директории и их поддиректории для файлов, соответствующих конкретным шаблонам, и хранить их в списке.
Статья описывает функцию ScanDir, которая позволяет получить список файлов со всеми подкаталогами, используя Delphi и язык программирования Pascal.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS