Пошук файлів в delphi

Пошук файлів в Delphi допоможе знайти файли, які підходять за обраним програмістом критеріям - імені, розміром, датою створення і т.д. Пошук файлів може проводитися як по всьому обраному диску, так і обмежитися окремим каталогом. Пошук файлів в Delphi виконується в три етапи.






  1. Спочатку знаходиться перший файл, що задовольняє заданій масці. Цей пошук здійснюється за допомогою функції
    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. У програмі папка розглядається як файл, всередину пошук не лізе. Можна завантажити архів з цією програмою.







    Схожі статті