Как да се определи дали даден компютър е свързан към интернет
Търсене на файлове в Делфи
За да търсите файлове на диска в Делфи, има две функции, като първият от тях - е 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);
приключи;
Ами това е всичко :)) Надявам се, че ви помогна с техните аргументи и примери!
Свързани статии