Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Поиск файлов по маске по всему дереву каталогов, начиная с указанного

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

Поиск файлов по маске по всему дереву каталогов, начиная с указанного

Автор: Dimka Maslov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Поиск файлов по маске по всему дереву каталогов, начиная с указанного

Продедура производит фалов по маске в указанном и во всех его вложенных
каталогах.

Параметр StartFolder указывает на начальный каталог поиска,

параметр Mask указывает маску поиска (например '*.pas'),

параметр List указывает на список строк, в которых будут записаны
результаты поиска,

Необязательный параметр ScanSubFolders указывает на необходимость
поиска во вложенных подкаталогах.

Зависимости: Windows, SysUtils, Classes, Masks
Автор:       Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        29 апреля 2002 г.
***************************************************** }

procedure FindFiles(StartFolder, Mask: string; List: TStrings;
  ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;
begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
              List.Add(StartFolder + Name);
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
begin
  FindFiles('C:\Program Files\', '*.exe', memo1.Lines, true);
end;

Привет! Я переведу текст на русский язык.

Это процедура Delphi, называемая FindFiles, которая ищет файлы в дереве каталогов, начиная с указанного каталога, и добавляет пути к списку строк. Поиск основан на заданном маске (шаблоне wildcard).

Вот разбивка кода:

  1. Процедура принимает четыре параметра:
    • StartFolder: Начальный каталог для поиска.
    • Mask: Шаблон wildcard, с которым сравниваются имена файлов.
    • List: Список строк, где будут храниться результаты.
    • ScanSubFolders (опционально): Булево значение, указывающее, нужно ли искать в подкаталогах. По умолчанию - True.
  2. Процедура начинает с обновления списка и инициализирует переменную TSearchRec, чтобы хранить результаты поиска.
  3. Она устанавливает начальный каталог, добавляя.trailing backslash, если он не уже есть, используя функцию IncludeTrailingBackslash.
  4. Она вызывает функцию FindFirst для начала поиска файлов в указанном каталоге. Флаг faAnyFile означает, что будут учитываться все типы файлов, а SearchRec будет хранить результаты поиска.
  5. В цикле она обрабатывает каждый найденный файл:
    • Если файл - это каталог (т.е., Attr and faDirectory не равно 0), она проверяет, нужно ли искать в подкаталогах (ScanSubFolders) и если имя каталога не равно "." или "..". Если оба условия выполняются, она рекурсивно вызывает себя для поиска в подкаталоге.
    • Иначе она проверяет, соответствует ли имя файла заданной маске с помощью функции MatchesMask. Если это так, она добавляет путь к файлу в список строк.
  6. После обработки каждого файла она вызывает функцию FindNext для продолжения поиска файлов.
  7. Когда все файлы будут обрабатываться, она закрывает handle поиска с помощью функции FindClose.
  8. Наконец, она обновляет список и завершает работу.

Пример кода демонстрирует использование этой процедуры для поиска файлов с расширением .exe в каталоге "C:\Program Files\" и хранения результатов в компоненте memo (memo1.Lines).

Поиск файлов по маске в дереве каталогов с указанным стартовым каталогом и возможностью сканирования подкаталогов.


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


:: 2009-10-16 10:55:12 :: re:Поиск файлов по маске по всему дереву каталогов, начиная с указанного

пользователь: Антон.

А как зделать что бы один фаил проверяло по масиву масок? Я делаю:
...
if MatchesMask(DR.Name, mask[i]) then File_nam:=True
...
Но неработает.

mask:array[1..25]of String; //mask


:: 2009-10-17 12:23:34 :: re:Поиск файлов по маске по всему дереву каталогов, начиная с указанного

пользователь: kan.

Проверяешь верно, видимо неверно выходишь из проверки, добавить что-то типа:
if File_nam then break; //поставь после проверки MatchesMask


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



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


реклама



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

Время компиляции файла: 2024-06-02 10:20:12
2024-07-23 21:03:07/0.003960132598877/0