- Спочатку знаходиться перший файл, що задовольняє заданій масці. Цей пошук здійснюється за допомогою функції
function FindFirst (const Path: String; Attr: Integer; var F: TSearchRec): Integer;
Параметр 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.
Щоб визначити, чи має знайдений файл необхідний атрибут, використовується порозрядне логічне множення:
if (F.Attr and faDyrectory) = F.Attr
then S: = 'Це каталог';
Тобто, має необхідний атрибут змінна F.Attr при порозрядному логічному множенні на нього не змінюється.
function FindNext (var F: TSearchRec): Integer;
Мінлива F, в якій перша функція зберегла результат пошуку, передається функції FindNext як параметр. На підставі записаної в неї інформації буде продовжено пошук наступного відповідного файлу.
procedure FindClose (var F: TSearchRec);
Ця процедура звільняє пам'ять, яка була виділена системою для проведення процесу пошуку.
Функції FindFirst і FindNext повертають значення 0. Якщо при пошуку не виникло помилок і черговий файл був знайдений.
Для прикладу розглянемо просту програмку. яка поізводіт пошук всіх файлів на диску C. У програмі папка розглядається як файл, всередину пошук не лізе. Можна завантажити архів з цією програмою.