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å?
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.