Главная » Поиск файлов
В Delphi существует две функции для поиска файлов. Это: function FindFirst(const Path: string; Attr: Integer;
  var F: TSearchRec): Integer;function FindNext(var F: TSearchRec): Integer;Разберемся, что же означают эти функции. Для начала возьмем первую - FindFirst. Разберемся сначала с переменными.
Path
Это переменная, как видно из названия, показывающая путь к директории, где будет производиться поиск файла. Кроме этого, в эту переменную входит также и имя файла (файлов), которые должны быть найдены. Причем, в названии файла можно пользоваться такими символами: * (звездочка) и ? (знак вопроса). Значения этих символов стандартны: знак вопроса - любой допустимый символ, звездочка - комбинация любых допустимых символов. Под допустимыми символами я понимаю символы, которые могут использоваться в операционной системе для обозначения имен файлов. Пример использования переменной Path: {поиск файлов с любым именем в корне диска C:}
Path:='c:*.*';{поиск файлов в директории E:AUDIO с именем, которое
начинается на song3, с расширением .wav}
Path:='e:audiosong3?.wav';Обратите внимание:
Недопустимо использовать символы * и ? в названии директории. Эти символы могут использоваться только в имени файла.
Attr
Переменная задает тип файлов, которые будут найдены. Тип переменной - Integer. Чтобы не мучаться с запоминанием цифр, рекомендую Вам запомнить такие слова:
faReadOnly - файлы, у которых установлен аттрибут "Только для чтения".
faHidden - файлы, у которых установлен атрибут "Скрытые".
faSysFile - файлы, у которых установлен атрибут "Системный".
faArchive - файлы, у которых установлен атрибут "Архивный".
faDirectory - директория. То есть поиск поддиректорий в директории.
faAnyFile - любой файл (в том числе и faDirectory, и faVolumeID).Теперь с этими словами можно обращаться как с цифрами - складывать их и вычитать. Например: {поиск Скрытых и Системных файлов}
Attr := faHidden + faSysFile;{поиск всех файлов, кроме файлов,
имеющих атрибут "Только для чтения"}
Attr := faAnyFile - faReadOnly;Однако учтите:
При применении вычитания результат может получиться несколько неожиданным, поэтому им лучше не злоупотреблять.Теперь разберемся, что же выдает функция. Функция возвращает 0, если была выполнена успешно, или, в противном случае, код ошибки. Кроме того, если функция нашла файл, удовлетворяющий и условиям переменной Path, и условиям переменной Attr, то она записывает результат в переменную F (типа TSearchRec), которая, естественно, должна быть объявлена командой Var. Тип TSearchRec можно представить как: type TSearchRec = record
  Time: Integer;
  Size: Integer;
  Attr: Integer;
  name: TFileName;
  ExcludeAttr: Integer;
  FindHandle: THandle;
  FindData: TWin32FindData;
end;Теперь разберемся, что означает функция FindNext. Если команда FindFirst нашла какой-либо файл, то, возможно, если имя файла задано с символами * и/или ?, есть еще один или несколько файлов, удовлетворяющих условию поиска. В этом случае и используется команда FindNext. Функция также возвращает 0, если была выполнена успешно, или, в противном случае, код ошибки. И также записывает данные в переменную F. Теперь, зная эти две команды, можно составить и алгоритм поиска заданного файла. Простейший алгоритм: var
  F: TSearchRec;
  Path: string;
  Attr: Integer;
begin
  {Искать все файлы в заданной директории с расширение .wav}
  Path := 'e:audioalbum31*.wav';
  {которые имеют атрибуты "Только для чтения" и "Архивный"}
  Attr := faReadOnly + faArchive;  FindFirst(Path, Attr, F);  {Если хотя бы один файл найден, то продолжить поиск}
  if F.name <> '' then
  begin
    ListBox1.Items.Add(F.name); {Добавление в TListBox имени найденного файла}
    while FindNext(F) = 0 do
      ListBox1.Items.Add(F.name);
  end;
  FindClose(F);
end.Обратите внимание на процедуру FindClose. Она освобождает память, которую заняли функции FindFirst и FindNext. Категория: Языки программирования | Просмотров: 108