Căutarea fișierelor pe Delphi, articole diferite, articole, programare - programare c, delphi, c #

Cum să determinați dacă un computer este conectat la Internet

Găsirea fișierelor pe Delphi

Pentru a găsi fișiere pe un disc în Delphi, există două funcții, primul este FindFirst, descrierea de mai jos este:

funcția FindFirst (const Cale: șir; Attr: Integer; var F: TSearchRec): Integer;

Cale - calea de căutare a fișierului, inclusiv numele și extensia acestuia (este posibil să se utilizeze simbolul *).

attr - atribute ale dosarului. Pot avea următoarele valori:

faReadOnly $ 00000001 Numai pentru citire
Împiedicat $ 00000002 Ascuns
Sistemul faSysFile $ 00000004
faVolumeID $ 00000008 Eticheta discului
faDirectory $ 00000010 Director
faArhive $ 00000020 Normal
faAnyFile $ 0000003F Orice fișier

F este o variabilă de tip TsearchRec, în care Delphi folosește toate caracteristicile fișierului găsit. O descriere a tipului TsearchRec (sugerez numai pentru a facilita învățarea, tipul în sine este deja descris în SysUtils).

tip
TSearchRec = înregistrare
Timp: Integer; // timpul de creare
Dimensiune: Integer; // dimensiunea fișierului în octeți
Attr: Integer; // Atribute
Nume: TFileName; // filename
ExcludeAttr: Integer;
FindHandle: Thandle; // manipulați la dosar
FindData: TWin32FindData; // adaugă. informații despre fișiere
se încheie;


Acum voi da un exemplu simplu de utilizare a acestei funcții. Puneți un TButton pe formular și manipulatorul de evenimente OnClick ar trebui să aibă ceva de genul:

procedura TForm1.Button1Click (expeditor: TObject);
v sr sr: TSearchRec;
începe
findFirst ('* .exe', faAnyFile, sr);
edit1.Text: = sr.Name;
se încheie;

Pentru a căuta următorul fișier, trebuie să scrieți FindNext (Sr); Dacă fișierul este găsit, procedurile FindFirst și FindNext returnează 0 (zero).

Ei bine, acum, de fapt, despre modul în care puteți aplica aceste funcții în practică, este din nou un exemplu. Pentru a înțelege folosirea acestor funcții, încercăm să scriem un program care listează toate programele cu extensia * .exe în directorul specificat și apoi când se face clic pe butonul, programul inclus va fi inclus. De exemplu, vă voi arăta cum să găsiți toate fișierele .exe din directorul Windows și apoi să explicați cum puteți modifica programul!

Deci, punând componenta TListBox pe ea, vom lista fișierele găsite. Funcționatorul de evenimente OnClick pentru primul nostru buton este înlocuit cu:

procedura TForm1.Button1Click (expeditor: TObject);
v sr sr: TSearchRec;
Rezultat: cuvânt;
începe
ChDir ('C: \ windows'); // modificați folderul la C: \ Windows
Rezultat: = FindFirst ('* .exe', faAnyFile, sr);
ListBox1.Clear;
În timp ce rezultatul = 0 nu
începe
Rezultat: = FindNext (sr);
ListBox1.Items.add (sr.name);
End;
se încheie;

După cum puteți vedea, am organizat doar o trecere circulară prin directorul C: \ Windows, care se termină de îndată ce funcția revine non-zero! Funcția ChDir a fost utilizată pentru a schimba dosarul din folderul curent în C: \ windows \

Dar metoda de mai sus găsește fișiere numai în directorul specificat de variabila Path: String. Mi se pare că acest lucru nu este suficient pentru a rezolva majoritatea problemelor de căutare, așa că merită scris un algoritm de căutare de fișiere în fiecare director găsit.

Procedura mea de căutare avansată arată astfel:

procedura ffind (cat: string); // unde să începeți căutarea
var mare: TSearchRec;
res: integer; // rezultatul căutării (0 sau nu)
începe
res: = FindFirst (pisică + '*. *', faAnyFile, mare); // căutați primul fișier
res: = findNext (mare); // căutați următorul fișier
În timp ce res = 0 face
începe
dacă (Sea.Attr = faDirectory) și ((Sea.Name = '.') sau (Sea.Name = '..')) atunci // nu există fișiere. și ..
începe
Res: = FindNext (mare);
Continuați; // continuați buclă
se încheie;

dacă (Sea.Attr = faDirectory) apoi // dacă găsim un director, atunci căutăm fișiere în el
începe
Ffind (pisică + Sea.Name + '\'); // apelăm recursiv la procedura noastră
Res: = FindNext (Marea); // căutați următorul. fișier
Continuați; // continuați buclă
se încheie;
form1.ListBox1.Items.Add (Sea.Name); // adăugați numele fișierului în Listbox: Tlistbox
Res: = FindNext (Marea); // căutați următorul. fișier
se încheie;
FindClose (Sea); // eliberați căutarea căutată
se încheie;

Aici a fost utilizată procedura FindClose (var sea: TsearchRec); este necesar să eliberați variabila de căutare. În exemplele următoare, nu o voi folosi, dar aveți în minte.

Poate că acest algoritm nu este cel mai rapid și mai convenabil, dar funcționează.
Pentru a vă asigura că aplicația dvs. nu pare a fi penduloasă, puteți adăuga aplicația Application.ProcessMessages la începutul procedurii noastre.

Acum, puneți butonul pe formular pentru a rula programul selectat în ListBox prin apăsarea acestuia. Managerul de evenimente Onclick pentru al doilea buton a fost astfel:

procedura TForm1.Button2Click (expeditor: TObject);
începe
WinExec (pchar (listbox1.Items [listbox1.itemindex]), sw_show);
se încheie;

Deoarece fișierele se află în directorul Windows, atunci când apelați metoda WinExec, calea către fișiere poate fi omisă și dacă folosiți orice alt director, apelul metodei WinExec ar trebui să fie ceva de genul:

WinExec (pchar ('C: \ Calea către folderul tău \' + listbox1.Items [listbox1.itemindex]), sw_show);

Dacă doriți să căutați fișiere într-un director specificat de utilizator, puteți utiliza componenta DirectoryListBox care permite accesul la directoarele de pe computer și vă permite să modificați directorul curent făcând dublu clic pe mouse. Puteți găsi directorul selectat astfel:

Prin urmare, în dispozitivul de manipulare al primului buton, trebuie să eliminați apelul pentru funcția ChDir. Și în dispozitivul de manipulare al celui de-al doilea buton, introduceți structura de mai sus.

Deci, voi da codul complet al aplicației pe care l-am folosit folosind componenta DirectoryListBox

utilizări
Windows, Mesaje, SysUtils, Clase, Grafică, Controale, Formulare, Dialoguri,
StdCtrls, FileCtrl;

tip
TForm1 = clasa (TForm)
Editare1: TEdit;
Buton1: TButton;
ListăBox1: TListBox;
Button2: TButton;
DirectorListBox1: TDirectoryListBox;
procedura Button1Click (expeditor: TObject);
procedura Button2Click (expeditor: TObject);
privat

public

se încheie;

var
Form1: TForm1;

procedura TForm1.Button1Click (expeditor: TObject);
v sr sr: TSearchRec;
Rezultat: cuvânt;
începe
Rezultat: = FindFirst ('* .exe', faAnyFile, sr);
ListBox1.Clear;
În timp ce rezultatul = 0 nu
începe
Rezultat: = FindNext (sr);
ListBox1.Items.add (sr.name);
End;
se încheie;

procedura TForm1.Button2Click (expeditor: TObject);
începe
WinExec (pchar (directorListBox1.Directory + '\' + listbox1.Items [listbox1.itemindex]), sw_show);
se încheie;

Ei bine, asta e tot :)) Sper că te-am ajutat cu argumentele și exemplele mele!

Articole similare