Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как получить список файлов со всеми подкаталогами

Delphi , Файловая система , Файлы

Как получить список файлов со всеми подкаталогами

Оформил: DeeCo

Автор: Анатолий Подгорецкий

procedure ScanDir(StartDir: string; Mask: string; List: TStrings);
var
  SearchRec: TSearchRec;
begin
  if Mask = '' then
    Mask := '*.*';
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
  if FindFirst(StartDir + Mask, faAnyFile, SearchRec) = 0 then
  begin
    repeat Application.ProcessMessages;
      if (SearchRec.Attr and faDirectory) <> faDirectory then
        List.Add(StartDir + SearchRec.Name)
      else if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')thenbegin
        List.Add(StartDir + SearchRec.Name + '\');
      ScanDir(StartDir + SearchRec.Name + '\', Mask, List);
  end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Пример вызова, параметры 1. имя папки 2. маска, по умолчанию *.* 3. хранилище для резульатат, любой наследник от TString, например TStringList
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Clear;
  ScanDir('c:', '', ListBox1.Items);
  Label1.Caption := IntToStr(ListBox1.Items.Count);
end;

Переведенный текст:

Представленная процедура Delphi ScanDir рекурсивно сканирует директорию и ее поддиректории для файлов, соответствующих указанному маске, и добавляет имена файлов в список.

Разбивка работы:

  1. Процедура принимает три параметра:
    • StartDir: начальная директория для сканирования
    • Mask: шаблон имени файла для поиска (по умолчанию - '*.*')
    • List: список, в который будут добавлены имена файлов, соответствующие маске (потомок TString, например, TStringList)
  2. Процедура сначала проверяет, является ли параметр Mask пустым, и если так, то устанавливает его в значение '*.*'.
  3. Затем она добавляет символ обратной косой черты (\) к параметру StartDir, если он не уже содержит этот символ.
  4. Процедура использует функцию FindFirst для поиска файлов в директории StartDir, соответствующих маске. Если не возникло ошибок, она вступает в цикл, где:
    • Она обрабатывает сообщения от других приложений (например, обновляет элементы GUI) с помощью Application.ProcessMessages.
    • Если файл не является директории (т.е., SearchRec.Attr and faDirectory = faDirectory), она добавляет имя файла в список. Если файл является директорий, но не родительская директория (..) или текущая директория (.), она рекурсивно вызывает себя с поддиректорией как новым начальным пунктом.
  5. Цикл продолжается, пока FindNext возвращает 0 (означающее, что больше файлов не было найдено).
  6. Наконец, процедура закрывает поиск handle с помощью FindClose.

Пример кода демонстрирует использование этой процедуры:

  1. Он очищает список элементов (ListBox1) и затем вызывает процедуру ScanDir с параметрами:
    • StartDir: 'c:', представляющий корневую директорию диска C:
    • Mask: пустая строка (''), что означает поиск всех файлов (по умолчанию - маска '*.*')
    • List: ListBox1.Items, который является списком строк
  2. После сканирования он устанавливает текст заголовка (Label1) в количество элементов в списке.

В целом, этот код предоставляет удобный способ рекурсивно сканировать директории и их поддиректории для файлов, соответствующих конкретным шаблонам, и хранить их в списке.

Статья описывает функцию ScanDir, которая позволяет получить список файлов со всеми подкаталогами, используя Delphi и язык программирования Pascal.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:35:13/0.0039019584655762/0