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

Рекурсивный проход дерева каталогов

Delphi , Файловая система , Директории

Рекурсивный проход дерева каталогов

Автор: Vit
WEB-сайт: http://forum.vingrad.ru

procedure ScanDir(Dir: string);
var
  SearchRec: TSearchRec;
begin
  if Dir <> '' then
    if Dir[length(Dir)] <> '\' then
      Dir := Dir + '\';

  if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.name = '.') or (SearchRec.name = '..') then
        continue;

      if (SearchRec.Attr and faDirectory) <> 0 then
        ScanDir(Dir + SearchRec.name)
          //we found Directory: "Dir+SearchRec.name"
      else
        Showmessage(Dir + SearchRec.name);
      //we found File: "Dir+SearchRec.name"

    until
      FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ScanDir('c:');
end;

Вот перевод текста на русский язык:

Процедура ScanDir

Процедура принимает строковый параметр Dir, представляющий директорию для сканирования. Переменная SearchRec объявлена как TSearchRec, который является типом записи, содержащей информацию о результатах поиска,such as файловое имя, атрибуты и т.д.

Функция выполняет следующие действия:

  1. Если параметр Dir не пустой, она проверяет, является ли последний символ строки не обратной косой чертой (\). Если нет, она добавляет обратную косую черту в конец пути директории.
  2. Она вызывает функцию FindFirst с параметрами пути директории и диапазона поиска (*.*) для поиска всех файлов и поддиректорий в указанной директории.
  3. Функция затем вступает в цикл, который продолжается до тех пор, пока не будет найдено больше результатов поиска (т.е., FindNext возвращает 0).
  4. Внутри цикла она проверяет, является ли текущий файл точкой (.) или точкой-точкой (..) - эти являются специальными файлами в Windows, представляющими собой текущую директорию и ее родительскую директорию соответственно. Если так, она пропускает к следующей итерации цикла.
  5. Если текущий файл является поддиректорией (т.е., SearchRec.Attr содержит флаг faDirectory), она рекурсивно вызывает себя с новым параметром пути директории (Dir + SearchRec.name). Это позволяет функции обходить поддиректории.
  6. Если текущий файл не является поддиректорией, она отображает имя файла с помощью ShowMessage.
  7. Наконец, функция закрывает поисковый хендл с помощью FindClose.

Процедура Button1Click

Эта процедура является обработчиком события клика кнопки на форме (TForm1). Она просто вызывает процедуру ScanDir с параметром пути директории 'c:' в качестве аргумента.

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

В статье описывается реализация рекурсивного прохода дерева каталогов в программировании на языке Delphi, при помощи процедуры ScanDir, которая выводит имена всех файлов и подкаталогов в указанном каталоге.


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

Получайте свежие новости и обновления по 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 12:19:15/0.0054178237915039/1