Hvordan søke etter filer og mapper med Delphi

Når du leter etter filer, er det ofte nyttig og nødvendig å søke gjennom undermapper. Se her hvordan du bruker Delphistyrken til å lage et enkelt, men kraftig, alt-samsvarende-filer-prosjekt.

File / Folder Mask Search Project

Følgende prosjekt lar deg ikke bare søke etter filer gjennom undermapper, men det lar deg også enkelt bestemme filattributter, for eksempel Navn, Størrelse, Endringsdato, etc. slik at du kan se når du skal påkalle dialogboksen Filegenskaper fra Windows utforsker. Spesielt demonstrerer det hvordan du rekursivt kan søke gjennom undermapper og sette sammen en liste over filer som samsvarer med en viss filmaske. Rekursjonsteknikken er definert som en rutine som kaller seg midt i koden.

For å forstå koden i prosjektet, må vi gjøre oss kjent med de tre neste metodene som er definert i SysUtils-enheten: FindFirst, FindNext og FindClose.

FindFirst

FindFirst er initialiseringsanropet for å starte en detaljert filsøkprosedyre ved å bruke Windows API-anrop. Søket ser etter filer som samsvarer med banespesifikatoren. Stien inneholder vanligvis jokertegn (* og?). Parameteren Attr inneholder kombinasjoner av filattributter for å kontrollere søket. Filattributtkonstantene som er anerkjent i Attr er:

instagram viewer
faAnyFile (hvilken som helst fil), faDirectory (kataloger), faReadOnly (les bare filer), faHidden (skjulte filer), faArchive (arkivfiler), faSysFile (systemfiler) og faVolumeID (volum-ID-filer).

Hvis FindFirst finner en eller flere samsvarende filer returnerer den 0 (eller en feilkode for feil, vanligvis 18) og fyller ut Rec med informasjon om den første samsvarende filen. For å fortsette søket, må vi bruke den samme TSearcRec-posten og sende den til FindNext-funksjonen. Når søket er fullført, må FindClose-prosedyren kalles for å frigjøre interne Windows-ressurser. TSearchRec er en post definert som:

Når den første filen er funnet, er Rec-parameteren fylt ut, og følgende felt (verdier) kan brukes av prosjektet ditt.
. attr, filens attributter som beskrevet ovenfor.
. Navn har en streng som representerer et filnavn, uten stiinformasjon
. Størrelse i byte av filen som ble funnet.
. Tid lagrer filens modifiseringsdato og -tid som en fildato.
. FindData inneholder tilleggsinformasjon, for eksempel filopprettingstid, siste tilgangstid og både lange og korte filnavn.

Finn neste

FindNext-funksjonen er det andre trinnet i den detaljerte filsøkprosedyren. Du må passere den samme søkeoppføringen (Rec) som er opprettet av samtalen til FindFirst. Returverdien fra FindNext er null for suksess eller en feilkode for feil.

FindClose

Denne prosedyren er den nødvendige termineringskaldingen for et FindFirst / FindNext.

Rekursiv filmaske samsvarende søker i Delphi

Dette er prosjektet "Søker etter filer" slik det vises på kjøretid. De viktigste komponentene på skjemaet er to redigeringsbokser, en listeboks, en avmerkingsboks og en knapp. Redigeringsbokser brukes til å spesifisere banen du vil søke i og en filmaske. Funnet filer vises i listeboksen, og hvis avkrysningsruten er merket av, skannes alle undermapper for samsvarende filer.

Nedenfor er det lille kodestykket fra prosjektet, bare for å vise at det er så enkelt å søke etter filer med Delphi: