Opplæring: Skriv din egen FindFiles tool

Hvordan bruke FindFirst og FindNext med rekursjon, for å legge filnavn og stier til en stringlist
Hvordan lage en liste over filene i en mappe og dens undermapper
I det følgende kort veiledning, Jeg skal vise deg det grunnleggende for å skrive din egen " Finn filer " verktøy. Prosedyren FindFiles ( FilesList
, StartDir
, filmaske
) lokaliserer filer i en gitt mappe og dens undermapper. Filene tilsvare en filmaske som du angir.
Parameter FilesList
er en stringlist som den fulle baner av filene vil bli lagt til. I parameter StartDir
du passerer start katalog (mappe), inkludert disken. Hvis du ønsker å søke en hel disk, angir du rotkatalogen på disken, for eksempel C: \\ eller A: \\
I parameter filmaske
du passerer navnet på filen for å finne, eller en fil maske med jokertegn (ved hjelp av * og?). Eksempler:
FindFiles (FilesList, 'c: \\', 'letter01.doc'); FindFiles (FilesList, 'c: \\', '* .dpr'); FindFiles (FilesList, 'd: \\ prosjekter', 'test ?? dpr.');
Hvis du ønsker å prøve denne fremgangsmåten, legger følgende komponenter til en form:

to Edits (en for å starte katalog, en for masken )

en knapp

a TLabel

a ListBox
kildekoden til FindFiles
I FindFiles vi bruker rekursjon: prosedyren kaller seg, for å finne de filene som ligger i underkataloger.
prosedyre FindFiles (FilesList: TStringList; StartDir, filmaske: string); Var SR: TSearchRec; DirList: TStringList; IsFound: Boolean; jeg: integer; begynne hvis StartDir [Lengde (StartDir)] < > '\\' Da StartDir: = StartDir + '\\'; //Lag en liste over filene i katalogen StartDir //ikke inkluderer kataloger! IsFound: = FindFirst (StartDir + filmaske, faAnyFile-faDirectory, SR) = 0; mens IsFound gjøre begynne FilesList.Add (StartDir + SR.Name); IsFound: = FindNext (SR) = 0; ende; FindClose (SR); //Lag en liste over underkataloger DirList: = TStringList.Create; IsFound: = FindFirst (StartDir + '. * *', FaAnyFile, SR) = 0; mens IsFound gjøre begynne if ((SR.Attr og faDirectory) < > 0) og (SR.Name [1] < > '.') så DirList.Add (StartDir + SR.Name); IsFound: = FindNext (SR) = 0; ende; FindClose (SR); //Scan listen over underkataloger rekursivt for i: = 0 til DirList.Count-en gjøre FindFiles (DirList [i], filmaske); DirList.Free; end;?
Hvordan bruke FindFiles
Før du ringer FindFiles, oppretter du en stringlist som FindFiles vil legge hele baner av filene som er funnet. Innholdet i stringlist kan vises i et tekstfelt, lagret på disken, uansett ... Til slutt, må du frigjøre dette stringlist
prosedyren TForm1.ButtonFindClick (Sender: TObject);. Var FilesList: TStringList; begynne FilesList: = TStringList.Create; prøv FindFiles (FilesList, EditStartDir.Text, EditFileMask.Text); ListBox1.Items.Assign (FilesList); LabelCount.Caption: = 'Filer funnet:' + IntToStr (FilesList.Count); //Annen behandling med listen over filer ... //... endelig FilesList.Free; end, end,




Next Page: