30. juni 2005 - 20:21Der er
6 kommentarer og 1 løsning
Søge i undermapper
Jeg bruger i øjeblikket denne kode til at finde alle txt-filer.
if FindFirst('GameData/*.txt', faAnyFile, SearchResult1) = 0 then begin repeat TXTComboBox.Items.Add(searchResult1.Name); until FindNext(SearchResult1) <> 0; end; FindClose(SearchResult1);
Men kan jeg få samme kode til at søge alle undermapper igennem også?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg bruger følgende i en backup routine jeg har lavet. List er en TListBox.
procedure TForm1.FindFiler(S: String); var Sr : TSearchRec; FileAttrs : Integer; begin FileAttrs := 0; // 0 for filer, 16 for mapper if FindFirst(S + '*.*', FileAttrs, Sr) = 0 then begin // Opdater med nye filer. repeat if (Sr.Attr and FileAttrs) = FileAttrs then if Sr.Name[1] <> '.' then // Navnet på nuværende eller øvre mappe. begin List.Items.Add(Copy(S+Sr.Name, Length(Fra)+1, Length(S+Sr.Name))); end; until FindNext(Sr) <> 0; FindClose(Sr); end; FileAttrs := 16; // 0 for filer, 16 for mapper if FindFirst(S + '*.*', FileAttrs, Sr) = 0 then begin // Opdater med nye mapper. repeat if (Sr.Attr and FileAttrs) = FileAttrs then if Sr.Name[1] <> '.' then // Navnet på nuværende eller øvre mappe. begin FindFiler(S + Sr.Name + '\'); end; until FindNext(Sr) <> 0; FindClose(Sr); end; end;
Jeg lavede engang denne til at finde en enkelt fil, men den kan hurtig laves om til at f.eks. retunere alle txt filer i f.eks. en StringList:
function FindFile(StartPath, FileName : string) : string;
procedure SearchDir(Path : string); var sr: TSearchRec; fr : integer; begin fr:=FindFirst(Path+'*.*', faAnyFile, sr); while (Result='') and (fr=0) do begin if (sr.Attr and faDirectory>0) and (sr.name<>'.') and (sr.name<>'..') then begin if FileExists(Path+sr.Name+'\'+FileName) then Result:=Path+sr.Name else SearchDir(Path+sr.Name+'\'); end; fr:=FindNext(sr); end; FindClose(sr); end;
begin Result:=''; SearchDir(StartPath); end;
----------- Kaldes sådan: Edit1.Text:=FindFile('c:\','HORZTITL.GIF');
En god gammel traver på Eksperten. Søger man i svarene, så finder man sikkert de første 10 implementeringer af en rekursiv søgerutine. Den gir' points hver gang.. :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.