Урок Delphi 7
Работа с файлами в Delphi

Поиск файлов в Delphi


Компоненты работающие с файлами
Классическая работа с файлами
Диалоги выбора файлов
Определение размера файла
Поиск файлов
Таблица функций






Уроки Delphi
  1.  Первая программа
  2.  Использование компонентов
  3.  События Delphi
  4.  Типы данных Delphi
  5.  Создание своих типов данных
  6.  Выражения и операторы
  7.  Работа с файлами в Delphi
  8.  Дополнительные формы
  9.  Подпрограммы в Delphi
  10. Исключительные ситуации
  11. Взаимодействие приложения с пользователем
  12. Указатели в Delphi
  13. Обзор компонентов
  14. Работа со строками
  15. Создание интерфейса
  16. Графика в Delphi
  17. Многопоточность в Delphi
  18. Динамическое создание
        компонентов
Поиск по сайту




 Это важно:
   Метод Application.ProcessMessages;

 Это полезно:
   Параметр Sender в обработчиках событий;










Бояться не надо



   Поиск файлов в Delphi поможет найти файлы, подходящие по выбранным программистом критериям - имени, размеру, дате создания и т.д. Поиск файлов может производиться как по всему выбранному диску, так и ограничиться отдельным каталогом. Поиск файлов в Delphi выполняется в три этапа.

  1. Сначала находится первый файл, удовлетворяющий заданной маске. Этот поиск осуществляется с помощью функции
      function FindFirst(const Path: String; Attr: Integer; var F: TSearchRec): Integer;

    Параметр Path задаёт адрес каталога (директории), в котором производится поиск. Он должен завершаться маской имён искомых файлов, например:
      'C:\Temp\*.*', '*.txt'.
    Символ '*' означает любое количество допустимых в имени файла символов. Если необходимо указать, что символ должен быть только один, то в маске используется символ '?'. Например, маска a*.txt определяет текстовые файлы с именем любой длины начинающиеся на a, а маска a?.txt ограничивает длину имени файлов двумя символами. Если в маске описан только файл, то поиск осуществляется только в текущем каталоге.

    Параметр Attr содержит набор атрибутов, которые могут учитываться при отборе файлов:

    • faReadOnly = $01 - файл только для чтения;
    • faHidden = $02 - скрытый файл;
    • faSysFile = $04 - системный файл;
    • faVolumeID = $08 - метка диска;
    • faDirectory = $10 - каталог (директория);
    • faArchive = $20 - архивный файл;
    • faAnyFile = $3F - произвольный файл.

       Наименования этих атрибутов могут иметь различные имена в различных системах. Именно текое предупреждение выдаёт Delphi при попытке использовать эти имена. Поэтому лучше использовать не наименования, а значения. Однако, тогда возникают непонятки: попробуй догадайся впоследствии, что такое $02 или $08... Поэтому нужно вводить константы с сответствующими значениями, и проблем не будет.

       Эти атрибуты имеют значение отдельных битов в результирующем числе Attr. Для задания искомому файлу набора атрибутов их нужно просто просуммировать:
      Attr := faReadOnly + faSysFile + faHidden;
    Такой набор атрибутов заставит функцию искать только скрытые системные файлы с характеристикой "только для чтения".

    Результат поиска содержится в переменной F, имеющей тип TSearchRec:
      type TSearchRec = record
        Time: Integer;
        Size: Integer;
        Attr: Integer;
        Name: TFileName;
        ExcludeAttr: Integer;
        FindHandle: THandle;
        FindData: TWin32FindData;
      end;


    Наиболее важными среди полей этой записи являются:

    • Name - имя файла;
    • Size - Размер файла в байтах;
    • Time - время создания файла в формате DOS.

  2. Чтобы определить, имеет ли найденный файл нужный атрибут, используется поразрядное логическое умножение:
      if (F.Attr and faDyrectory)=F.Attr
        then S:='Это каталог';

    То есть, имеющая нужный атрибут переменная F.Attr при поразрядном логическом умножении на него не изменяется.

  3. Когда первый файл, удовлетворяющий условиям поиска, найден, вызывается функция
      function FindNext(var F: TSearchRec): Integer;

    Переменная F, в которой первая функция сохранила результат поиска, передаётся функции FindNext в качестве параметра. На основании записанной в неё информации будет продолжен поиск следующего подходящего файла.

  4. Процесс поиска завершается вызовом процедуры:
      procedure FindClose(var F: TSearchRec);

    Эта процедура освобождает память, которая была выделена системой для проведения процесса поиска.

   Функции FindFirst и FindNext возвращают значение 0, если при поиске не возникло ошибок и очередной файл был найден.

   Программы, в которых предусмотрены функции поиска файлов, известны давно. Это, например, файловые коммандеры (volkov commander, norton commander, dos navigator, far). Также функция поиска файлов есть во всех операционных системах. В частности, в Windows поиск файлов вызывается через ПУСК - Поиск - Файлы и папки. В диалоговом окне поиска пользователю нужно задать, каким образом будет искаться файл: имя или маска и каталог начального поиска. Также есть возможноть уточнить дату изменения, содержащийся в файле текст, предполагаемый размер файла.

   А теперь ещё раз посмотрим, как в delphi происходит поиск файлов. Если пока непонятно, зачем это может потребоваться, вот несколько вариантов. Например, при запуске программы нужно проверить наличие необходимых для работы программы файлов. Или в фоновом режиме поиск источников обновления программы, или поиск файлов, содержащих результаты работы контролируемых программ, и т.д.

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

   Шаблон маски файлов может содержать:
  • Латинские буквы и цифры в названии и расширении файла;
  • Символ * (звездочка), который здесь служит заменой любого количества символов в названии или расширении файла;
  • Символ ? (знак вопроса). В маске этот символ заменяет только один символ в названии или расширении файла или директории.
   Приведём примеры. Если нужно найти все текстовые файлы (файлы с расширением TXT), то маска поиска будет такая: *.txt. Если нужно найти файлы, в названии которых содержится слово, например, vovan, то маска будет содержать это слово и символы * в начале и в конце, предусматривающие возможное наличие других символов в начале и в конце имени файла, а также в расширении: *vovan*.*. Если в имени файла первая буква a, а четвёртая b, то маску сконструируем такую: a??b*.*

   Нужно добавить, что в операционных системах семейства Windows строчные и прописные буквы в именах файлов не различаются, и соответственно, поиск тоже происходит без учёта регистра символов.

   Для примера рассмотрим простую программку, которая поизводит поиск всех файлов на диске C. В программе папка рассматривается как файл, внутрь поиск не лезет. Можно скачать архив с этой программой.


Предыдущий урок           В начало урока          Следующий урок  

Уроки Delphi начинающим







© 2023 Delphi-Manual.ru - Уроки Delphi начинающим с нуля