Меню сайта
Форма входа
Категории раздела
Общие статьи об INDY [6] INDY IN DEPTH [18]
Учебник созданный авторами INDY
Видеоуроки INDY [3] Основы Delphi [9]
Работа с файлами [6]
Главная » Статьи » Delphi » Работа с файлами

Поиск файлов
Поиск файлов в 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 - произвольный файл.

       Эти атрибуты имеют значение отдельных битов в результирующем числе 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, если при поиске не возникло ошибок и очередной файл был найден.

   Для примера рассмотрим простую программку, которая поизводит поиск всех файлов на диске C. В программе папка рассматривается как файл, внутрь поиск не лезет. Можно скачать архив с этой программой.
Категория: Работа с файлами | Добавил: nazgull (24.12.2012)
Просмотров: 1731 | Теги: программа, FILE, Алгоритм, поиск, Find, findclose, дерево, поиск файлов программа, делфи, на делфи | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ссылки