Announcement

Collapse
No announcement yet.

Baumstruktur durchsuchen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Baumstruktur durchsuchen

    Ich möchten einen Dateibaum nach einem bestimmten Eintrag durchsuchen. Mit ist die Anzahl der Children zur Root bekannt. Wie durchforste ich den kompletten Baum?

  • #2
    Hi,
    wenn es sich um Dateien/Verzeichnisse auf der Festplatte kannst Du die Funktionen FindFirst/FindNext nehmen (Beispiel in der Hilfe). Allerdings musst Du rekursiv arbeiten, d.h. Du hast eine Funktion die alle "Dateien", d.h. Dateien und Unterverzeichnisse in einem Ordner sucht. Wenn Du ein Verzeichnis findest, rufst Du dieselbe Funktion wieder auf, wenn du den passenden Eintrag findest, brichst Du ab.
    <br><br>
    procedure TForm1.Suche(s:string);<br>
    var<br>
    SR : TSearchrec;<br>
    begin<br>
    if (FindFirst(s+'*.*',faAnyFile, sr) = 0) then<br>
    begin<br>
    ((sr.size = 0) or (sr.attr = faDirectory)) and (sr.name[1] <> '.') <br>
    then Suche(s+sr.name+'\')<br>
    else if sr.Name = [DAS WAS DU SUCHEN WILLST] <br>
    then [DAS WAS DU TUN WILLST, WENN DU ES GEFUNDEN HAST] <br>
    while (FindNext(sr) = 0) do<br>
    begin<br>
    ((sr.size = 0) or (sr.attr = faDirectory)) and (sr.name[1] <> '.') <br>
    then Suche(s+sr.name+'\')<br>
    else if sr.Name = [DAS WAS DU SUCHEN WILLST] <br>
    then [DAS WAS DU TUN WILLST- WENN DU ES GEFUNDEN HAST] <br>
    end;<br>
    FindClose(sr);<br>
    end;<br>
    end;<br>
    <br><br>
    Jetzt musst du die Funktion nur noch mit z.B. Suche('c:\') aufrufen.

    So weit..

    Comment


    • #3
      Hi

      1.) Suche(<b>const</b> S: String); um den Stack nicht zu belasten<br>
      2.) if (SR.Name <> '.') and (SR.Name <> '..') and (SR.Attr and faDirectory <> 0) then ; ist richtiger, da es sehr wohl reguläre Verzeichnisse geben kann die mit einem führenden '.' benamt sein können.<br>

      if (SR.Size = 0) and (SR.Attr = faDirectory) and (SR.Name[1] <> '.') ist somit falsch, bzw. es werden z.B. keine versteckten Ordner (SR.Attr = faHidden or faDirectory) keine Systemverzeichnisse (SR.Attr and faSysFile or faDirectory) und keine regulären Ordner die mit einem Punkt '.' beginnen gescannt. Zusätzlich sollte SR.Size = 0 sein MUSS aber nicht, z.B. gezippte Ordner haben sehr wohl SR.Size <> 0.

      Gruß Hage

      Comment

      Working...
      X