Търсене на файлове в Делфи

Търсене на файлове в Делфи ви помага да намерите файлове, които са подходящи за избраните критерии програмист - име, размер, дата на създаване и т.н. Търсене на файлове може да се извършва както за избран диск, и се ограничава до определена директория. Търсене на файлове в Делфи се извършва на три етапа.
  1. На първо място е повече от един файл, който отговаря на предварително определена маска. Това търсене се извършва с помощта на
    функционира FindFirst (конст Path: String; ATTR: цяло число; Var F: TSearchRec): цяло число;

параметър ATTR съдържа набор от атрибути, които могат да бъдат взети под внимание при избора на файлове:

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

Имената на тези атрибути могат да имат различни имена в различните системи. Тя дава предупреждение Delphi tekoe когато се опитате да използвате тези имена. Затова е по-добре да не се използва имената и ценности. Въпреки това, то тогава има neponyatki: Опитайте се да предполагам, че тогава е $ 02 или $ 08. Поради това е необходимо да се въведе константи sotvetstvuet ценности, и няма проблеми.

Тези качества са важни в получените отделни битове включително ATTR. За да се определи набор от атрибути на файла, те трябва да просто да обобщим:
ATTR: = faReadOnly + faSysFile + faHidden;
Този набор от атрибути причини функцията да търсите само скрити системни файлове с характеристика "Read Only".

резултат от търсенето се съдържа в променливата тип Е. като TSearchRec:
Типове TSearchRec = запис
Време: Integer;
Размер: цяло число;
ATTR: Integer;
Име: TFileName;
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData;
приключи;

Сред най-важните области на този запис са:

  • Име - име на файла;
  • Размер - Размерът на файла в байтове;
  • Време - Часът файла е създаден в DOS формат.

За да определите дали файлът с атрибут намери се използва побитови логически умножение:
ако (F.Attr и faDyrectory) = F.Attr
тогава S: = "Това е директория";
Това означава, че има променлива F.Attr желания атрибут когато побитовото логично умножение не го промените.
  • Когато първият файл, който отговаря на условията на търсене е намерена, функцията
    функционира FindNext (Var F: TSearchRec): цяло число;

    Променливата F, за които първата функция е да запишете вашите резултати от търсенето, функционални FindNext предава като параметър. Въз основа на информацията, съхранявана в него ще бъде продължена следващия мач се търси.

  • Процесът на търсене е завършена, като се обадите на процедурата:
    процедура FindClose (Var F: TSearchRec);

    Тази процедура освобождава паметта, която е разпределена за технологичната система за търсене.


  • Функции FindFirst и FindNext връщане стойност 0, ако търсенето не са имали грешки и след като бе установено файла.

    Програма, която осигурява функция за търсене на файлове, които отдавна са известни. Това, например, файлови командири (Волков командир, командир Нортън, DOS навигатор, досега). Също така, функция за търсене на файлове е налична във всички операционни системи. По-специално, търсене на файлове на Windows се извиква чрез Start - Търсене - Всички файлове и папки. В диалоговия прозорец за търсене, потребителят трябва да посочи по какъв начин ще се търси име на файл или маска и каталогизирате първоначалното търсене. Vozmozhnot също трябва да се уточни датата на промените, които се съдържат в текстовия файл, приблизителният размер на файла.

    А сега погледнете отново, както в Делфи е търсене на файлове. Ако не е ясно защо това може да отнеме, ето няколко опции. Например, когато стартирате програмата, която трябва да се провери наличието на необходимите файлове, за да стартирате програмата. Или на фона на източниците на софтуерните актуализации, или търсене на файлове, съдържащи резултатите от контролираните програми и т.н.

    Основните правила са на името на работа, за да търсите файлове в процедурата за търсене на файлове. По ваше желание, можете да укажете името на файла директно, а името на маската, ако името не е известно или може да има множество файлове, отговарящи на критериите за търсене. По този начин, ние питаме специалните търсене шаблони, които съдържат условия, попаднали в извадката, в търсенето на файлове. Разбира се, можете да търсите за файлове или цели директории, т.е., всички елементи на файловата система на компютъра.

    Шаблонен файл маски могат да съдържат:
    • Букви и цифри в разширението на името на файла и;
    • В * (звездичка), които са заместител на произволен брой символи в разширението на името на файла или;
    • Символ? (Въпрос марка). Маската, която замества характер само един герой в разширението на името или файл или директория.
    Дайте примери. Ако искате да намерите всички текстови файлове (файлове с разширение TXT), след маската за търсене ще бъде такъв: * .txt. Ако искате да търсите файлове, чиито имена съдържат думата, например, vovan. маската ще съдържа думата и символите * в началото и в края, като предоставя за евентуалното наличие на други знаци в началото и в края на името на файла, както и в разширяването: * vovan * * .. Ако първата буква на името на файла. и четвъртата б. след това ще конструира маска: а ?? б * *.

    Трябва да добавя, че в Windows операционни системи главни и малки букви в имената на файловете не се различават, и следователно, търсенето също се случва нечувствителен.

    Да вземем например един прост пример програма. който poizvodit търсене за всички файлове на диск C. В папката на програмата се третира като файл в търсенето не се покачва. Можете да изтеглите архива с програмата.

    процедура TForm1.Button1Click (Sender: TObject);
    Var Драйв. байт;
    започвам
    за задвижване: = 0 до 25 направи
    ако DriveExists (диск) след това
    ListBox1.Items.Add (Chr (Диск + $ 41));
    приключи;

    CreateDir (FilesSAMPServers); // - създава папка
    Ако FileExists (FilesSAMPServers + "\ serverov.ini Имена") след // - когато новосъздадения файл папка ще предприемат?
    започвам
    CreateDir (FilesSAMPServers); // - създава папка отново?

    SL: = TStringList.Create;
    SL.Add (S); // S не се определя от това, което сме направили?
    S: = sDBComboBox1.Text; // това текстово поле
    sDBComboBox1.Items.Add (S); // не само по-лесно да го напиша в клетка текст:

    с sDBComboBox1 правя
    Items.Add (текст);


    Що се отнася до това как да се прокара папка в папка - трябва да го създаде там. Ето кода, който създава папка в нея още една А, и в него още един:

    CreateDir ( "А");
    CreateDir ( "A \ A ');
    CreateDir ( "A \ A \ A ');