Keresés fájlok Delphi, a különböző cikkek, programozás - programozás C, Delphi, C #

Annak megállapítása, hogy a számítógép csatlakozik az internethez

Fájlok keresése a Delphi

Keresni a fájlokat a lemezen a Delphi, két funkció, az első közülük - a FindFirst alatt a leírás:

működni FindFirst (const Path: string; Attr: integer; var F: TSearchRec): integer;

Path - ahogyan a keresni egy fájlt, beleértve annak nevét és kiterjesztését (ez lehet használni a * jelölés).

attr - az attribútumok a fájl. Lehet hogy a következő értékeket:

faReadOnly $ 00000001 Read-only
faHidden $ 00000002 rejtett
faSysFile $ 00000004 Rendszer
faVolumeID $ 00000008 Lemeznév
faDirectory $ 00000010 Directory
faArchive $ 00000020 Semleges
faAnyFile $ 0000003F Bármilyen fájl

F- típusú változó TsearchRec, elküldi az összes funkcióját Delphi fájl található. Leírás típus TsearchRec (az ajánlat csak hogy könnyebb megtanulni, a nagyon típusát már leírt SysUtils).

típus
TSearchRec = rekord
Idő: integer; // létrehozásának időpontja
Méret: integer; // A fájl mérete bájtban
Attr: integer; // attribútumok
Név: TFileName; // fájlnév
ExcludeAttr: integer;
FindHandle: THandle; // Fájl Handley
FindData: TWin32FindData; // hozzá. fájl információ
végén;


Most egy egyszerű példát használja ezt a funkciót. Tedd a forma egy gomb TButton, és az onClick eseménykezelő ő kell kinéznie:

eljárás TForm1.Button1Click (Sender: TObject);
var sr: TSearchRec;
kezdődik
findFirst ( '* exe.', faAnyFile, SR);
edit1.Text: = sr.Name;
végén;

Keresni a következő ugyanaz a fájl, szükséges, hogy írjon FindNext (Sr); Ha a fájl található, a FindFirst és FindNext eljárások visszatér 0 (nulla).

Nos, most már valóban arról, hogyan lehet alkalmazni ezeket a funkciókat a gyakorlatban, hogy van, példaként újra. Hogy ezekkel a funkciókat, megpróbál írni egy programot, amely adott ki egy listát az összes program az * .exe a megadott könyvtárban, majd nyomja meg a gombot, hogy a kiválasztott program. A példában megmutatom, hogyan kell találni az összes .exe fájl a Windows mappában, majd elmagyarázzák, hogyan kell módosítani a példaprogramot!

Tehát az űrlapon TListBox alkatrész benne, akkor megjelenik egy lista a fájlok. Onclick eseménykezelő az első gomb átvált erre:

eljárás TForm1.Button1Click (Sender: TObject);
var sr: TSearchRec;
Eredmény: szó;
kezdődik
Könyvtárváltókat ( 'C: \ windows'); // módosítsa a mappát a C: \ Windows
Eredmény: = FindFirst ( '* .exe', faAnyFile, SR);
ListBox1.Clear;
Míg eredmény = 0 do
kezdődik
Eredmény: = FindNext (SR);
ListBox1.Items.add (sr.name);
Vége;
végén;

Mint látható, már csupán a szervezett ciklikus áthaladását a C: \ Windows, amely megszűnik, mihelyt a függvény egy nem nulla! Könyvtárváltókat funkció használható változtatni a jelenlegi könyvtárat a C: \ windows \

De ahogy a fenti fájlok csak a könyvtárban, amely be van állítva a változó Path: String. Azt hiszem, ez nem elég, hogy megoldja a legtöbb problémát a kereső, így meg kell írni egy fájlt kereső algoritmus megtalálható minden könyvtár.

Bővítettem a keresési eljárást a következőképpen néz ki:

eljárás ffind (macska: string); // könyvtárat, ahonnan indul a keresés
var tenger: TSearchRec;
res: integer; // keresési eredmény (0, vagy sem)
kezdődik
res: = FindFirst (cat + '* *.', faAnyFile, tengeri); // megtalálja az első fájlt
res: = findNext (tengeri); // keres a következő fájl
Míg res = 0 do
kezdődik
if (Sea.Attr = faDirectory) és ((Sea.Name = ' ') vagy (Sea.Name =' ..')), akkor // hogy nincsenek fájlokat. és ..
kezdődik
Res: = FindNext (tengeri);
Folytatás // továbbra hurok
végén;

if (Sea.Attr = faDirectory), akkor // ha találtak könyvtár, keresi benne lévő fájlokat
kezdődik
Ffind (cat + Sea.Name + '\'); // rekurzív hívja eljárás
Res: = FindNext (tenger); // keres egy nyomvonal. fájl
Folytatás // továbbra hurok
végén;
form1.ListBox1.Items.Add (Sea.Name); // hozzá a Listbox: Tlistbox fájlnév
Res: = FindNext (tenger); // keres egy nyomvonal. fájl
végén;
FindClose (tenger); // kiadja a peresennuyu keresés
végén;

Itt az eljárás FindClose (var tenger: TsearchRec) használtak fel; szükség van a kibocsátás a keresési változó. A következő példákban az ő nem fogom használni, de van, hogy szem előtt.

Talán ez az algoritmus nem a leggyorsabb és legkényelmesebb, de működik.
Annak érdekében, hogy az alkalmazás nem nézett állott, felveheti Application.ProcessMessages elején mi eljárásokat.

Most tegye a forma egy másik gombot, nyomja rá, hogy elindítsa a kiválasztott program ListBox'e. Az eseménykezelő onclick a második gomb megfordultam ezt:

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
WinExec (pchar (listbox1.Items [listbox1.itemindex]), sw_show);
végén;

Mivel a fájlok a Windows könyvtárban, akkor nem adja meg a módszer hívás WinExec utat a fájlokat, és ha bármilyen más könyvtár, a hívás WinExec módszert kell valami, mint ez:

WinExec (pchar ( 'C: \ elérési utat az mappa \' + listbox1.Items [listbox1.itemindex]), sw_show);

Nos, ha azt szeretnénk, hogy keressen fájlokat a felhasználó által megadott lehet használni DirectoryListBox komponens, amely hozzáférést biztosít a könyvtárban a számítógép, és lehetővé teszi, hogy módosítsa az aktuális könyvtár duplán kattintva az egérrel. Ismerje meg a kiválasztott mappa, akkor:

Ezért a termelés az első gomb az eltávolítani kívánt hívás könyvtárváltókat funkciót. A építőiparban a fenti massza a termelés a második gombot.

Így van a teljes kód az alkalmazás, melyről kiderült, rám DirectoryListBox alkatrész

felhasználások
Ablakok, üzenetek, SysUtils, osztályok, grafika, vezérlők, Forms, párbeszédablakok,
StdCtrls, FileCtrl;

típus
TForm1 = osztály (TForm)
Edit1: tSzerkesztés;
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
DirectoryListBox1: TDirectoryListBox;
eljárás Button1Click (Sender: TObject);
eljárás Button2Click (Sender: TObject);
magán

nyilvános

végén;

var
Form1: TForm1;

eljárás TForm1.Button1Click (Sender: TObject);
var sr: TSearchRec;
Eredmény: szó;
kezdődik
Eredmény: = FindFirst ( '* .exe', faAnyFile, SR);
ListBox1.Clear;
Míg eredmény = 0 do
kezdődik
Eredmény: = FindNext (SR);
ListBox1.Items.add (sr.name);
Vége;
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
WinExec (pchar (DirectoryListBox1.Directory + '\' + listbox1.Items [listbox1.itemindex]), sw_show);
végén;

Nos, ez minden :)) Remélem segítettem neked érveiket, és példákat!

Kapcsolódó cikkek