Hur man söker efter filer och mappar med Delphi

När du letar efter filer är det ofta användbart och nödvändigt att söka igenom undermappar. Här kan du se hur du använder Delphis styrka för att skapa ett enkelt, men kraftfullt, hitta-alla-matchande-filer-projekt.

File / Folder Mask Search Project

Följande projekt låter dig inte bara söka efter filer genom undermappar, utan det kan också enkelt fastställas filattribut, till exempel namn, storlek, modifieringsdatum osv. Så att du kan se när du ska anropa dialogrutan Filegenskaper från Windows Utforskaren. I synnerhet visar det hur man rekursivt kan söka igenom undermappar och sätta ihop en lista över filer som matchar en viss filmask. Rekursionstekniken definieras som en rutin som kallar sig i mitten av sin kod.

För att förstå koden i projektet måste vi bekanta oss med de kommande tre metoderna som definierats i SysUtils-enheten: FindFirst, FindNext och FindClose.

findfirst

FindFirst är initialiseringssamtalet för att starta en detaljerad filsökningsprocedur med Windows API-samtal. Sökningen letar efter filer som matchar sökvägsspecifikationen. Vägen innehåller vanligtvis jokertecken (* och?). Parameteren Attr innehåller kombinationer av filattribut för att kontrollera sökningen. Filattributskonstanter som känns igen i Attr är: faAnyFile (vilken fil som helst), faDirectory (kataloger), faReadOnly (läs bara filer), faHidden (dolda filer), faArchive (arkivfiler), faSysFile (systemfiler) och faVolumeID (volym-ID-filer).

Om FindFirst hittar en eller flera matchande filer returnerar den 0 (eller en felkod för fel, vanligtvis 18) och fyller i Rec med information om den första matchande filen. För att fortsätta söka måste vi använda samma TSearcRec-post och skicka den till FindNext-funktionen. När sökningen är klar måste FindClose-proceduren anropas för att frigöra interna Windows-resurser. TSearchRec är en post definierad som:

När den första filen hittas fylls Rec-parametern och följande fält (värden) kan användas av ditt projekt.
. attr, filens attribut som beskrivs ovan.
. namn har en sträng som representerar ett filnamn, utan sökinformation
. Storlek i byte av den hittade filen.
. Tid lagrar filens modifieringsdatum och tid som fildatum.
. FindData innehåller ytterligare information, t.ex. filtillverkningstid, sista åtkomsttid och både de långa och korta filnamnen.

Hitta nästa

FindNext-funktionen är det andra steget i den detaljerade filsökningsproceduren. Du måste skicka samma sökpost (Rec) som har skapats av samtalet till FindFirst. Returvärdet från FindNext är noll för framgång eller en felkod för något fel.

FindClose

Den här proceduren är det nödvändiga avslutningsanropet för ett FindFirst / FindNext.

Rekursiv filmask Matchning Sökning i Delphi

Detta är projektet "Söka efter filer" som det visas vid körtid. De viktigaste komponenterna i formuläret är två redigeringsrutor, en listbox, en kryssruta och en knapp. Redigeringsrutor används för att ange sökvägen du vill söka i och en filmask. Hittade filer visas i listrutan och om kryssrutan är markerad skannas alla undermappar efter matchande filer.

Nedan är det lilla kodavsnittet från projektet, bara för att visa att det är lika enkelt att söka efter filer med Delphi: