ПредишенСледващото

Как да се определи дали даден компютър е свързан към интернет

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

За да търсите файлове на диска в Делфи, има две функции, като първият от тях - е FindFirst, по-долу е описание:

функционира FindFirst (Конст Path: низ; ATTR: Integer; Var F: TSearchRec): Integer;

Path - начина, по който да търсите за файлове, включително нейното име и разширение (това е възможно да се използва символа *).

ATTR - атрибутите на файла. Може да предприеме следните стойности:

faReadOnly 00000001 $ само за четене
faHidden $ 00000002 Hidden
faSysFile $ 00000004 система
faVolumeID $ 00000008 Disc Label
faDirectory $ 00000010 Directory
faArchive $ 00000020 Неутрално
faAnyFile $ 0000003F Всеки файл

F- тип променлива TsearchRec, го избутва всички характеристики на Delphi файл намерени. Описание тип TsearchRec (оферта само за да направи по-лесно да се учи, на самия тип вече е описано в SysUtils).

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


Сега аз дам един прост пример за използване на тази функция. Сложете формата на бутон TButton и събитие манипулатор OnClick тя трябва да изглежда така:

процедура TForm1.Button1Click (Sender: TObject);
Var SR: TSearchRec;
започвам
findFirst ( "* Търсейки. ', faAnyFile, SR);
edit1.Text: = sr.Name;
приключи;

За да търсите най-близките и същи файл, че е необходимо да се напише FindNext (SR); Ако не се намери файла, процедурите за FindFirst и FindNext върнат 0 (нула).

Е, сега всъщност за това как можете да приложите тези функции на практика, това е, за пример отново. За да се справят с тези функции, опитайте се да се напише програма, която даде списък с всички програми с * .exe в конкретна директория, и след това натиснете бутона за включване на избраната програма. На пример, който ще ви покаже как да намерите всички .exe файлове в папката на Windows, след което обясни как да модифицирате например програмата!

Така че, сложи върху компонента форма TListBox в него, ще се покаже списък с откритите файлове. OnClick събитие манипулатор за първите ни промени бутонът се по следния начин:

процедура TForm1.Button1Click (Sender: TObject);
Var SR: TSearchRec;
Резултат: дума;
започвам
CHDIR ( "C: \ Windows"); // промените папката за C: \ Windows
Резултат: = FindFirst ( "* .exe", faAnyFile, SR);
ListBox1.Clear;
Докато резултат = 0 направи
започвам
Резултати: = FindNext (SR);
ListBox1.Items.add (sr.name);
Край;
приключи;

Както можете да видите, че току-що са организирани цикличен преминаването на директорията C: \ Windows, който е прекратено веднага след като функцията връща различен от нула! функция CHDIR се използва за промяна на текущата папка към папката C: \ Windows \

Но начинът, по горните файлове само в директорията, която е зададена променлива Path: String. Мисля, че това не е достатъчно, за да се реши голяма част от проблемите на търсенето, така че трябва да пиша алгоритъм за търсене на файлове намери във всяка директория.

Аз разширява процедурата за търсене изглежда по следния начин:

процедура ffind (котка: низ); // директория, от която да започнете търсенето
Var морето: TSearchRec;
Рез: цяло число; // резултат от търсенето (0 или не)
започвам
ВЕИ: = FindFirst (котка + "* *.", faAnyFile, море); // намерите повече от един файл
ВЕИ: = findNext (море); // търсят следващия файл
Докато ВЕИ = 0 задачи
започвам
ако (Sea.Attr = faDirectory) и ((Sea.Name = '.') или (Sea.Name = '..')), тогава //, че няма файлове. и ..
започвам
Res: = FindNext (морски);
Продължи; // продължи да контур
приключи;

ако (Sea.Attr = faDirectory), след това, ако се установи // указател, търсите файлове в нея
започвам
Ffind (котка + Sea.Name + '\'); // рекурсивни обадете процедура
Res: = FindNext (SEA); // търси пътека. досие
Продължи; // продължи да контур
приключи;
form1.ListBox1.Items.Add (Sea.Name); // добавят към ListBox: Tlistbox име
Res: = FindNext (SEA); // търси пътека. досие
приключи;
FindClose (море); // освобождаване на търсенето peresennuyu
приключи;

Тук процедурата FindClose (VAR морето: TsearchRec) е използван; това е необходимо за освобождаването на променливата за търсене. В следващите примери от нея няма да се използва, но трябва да го имате предвид.

Може би, този алгоритъм не е най-бързият и най-удобен, но тя работи.
За да се гарантира, че вашата кандидатура не е погледна остаряла, можете да добавите Application.ProcessMessages в началото на нашите процедури.

Сега сложи под формата на друг бутон, за да го натиснете, за да стартирате избраната програма в ListBox'e. манипулатор на събитието OnClick за втората ни бутон Обърнах се по следния начин:

процедура TForm1.Button2Click (Sender: TObject);
започвам
WinExec (pchar (listbox1.Items [listbox1.itemindex]), sw_show);
приключи;

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

WinExec (pchar ( "C: \ пътя до папката \ '+ listbox1.Items [listbox1.itemindex]), sw_show);

Е, ако искате да търсите за файлове в директорията, зададен от потребителя може да се използва DirectoryListBox компонент, който осигурява достъп до директория на вашия компютър и ви позволява да промените текущата директория чрез двукратно щракване на мишката. Научете избраната папка, можете да:

Ето защо, в изхода на първия бутон, който искате да премахнете функцията обаждане CHDIR. А изграждането на по-горе пастата в изхода на втория бутон.

По този начин е най-пълния код на приложението, която се оказа в мен с DirectoryListBox компонент

употреби
Windows, Съобщения, SysUtils, Уроци, графика, контроли, форми, диалогови прозорци,
StdCtrls, FileCtrl;

тип
TForm1 = клас (TForm)
Edit1: TEdit;
Button1: TButton;
ListBox1: TListBox;
BUTTON2: TButton;
DirectoryListBox1: TDirectoryListBox;
процедура Button1Click (Sender: TObject);
процедура Button2Click (Sender: TObject);
частен

обществен

приключи;

Var
Form1: TForm1;

процедура TForm1.Button1Click (Sender: TObject);
Var SR: TSearchRec;
Резултат: дума;
започвам
Резултат: = FindFirst ( "* .exe", faAnyFile, SR);
ListBox1.Clear;
Докато резултат = 0 направи
започвам
Резултати: = FindNext (SR);
ListBox1.Items.add (sr.name);
Край;
приключи;

процедура TForm1.Button2Click (Sender: TObject);
започвам
WinExec (pchar (DirectoryListBox1.Directory + "\" + listbox1.Items [listbox1.itemindex]), sw_show);
приключи;

Ами това е всичко :)) Надявам се, че ви помогна с техните аргументи и примери!

Свързани статии

Подкрепете проекта - споделете линка, благодаря!