Announcement

Collapse
No announcement yet.

"FindDirectories"

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

  • "FindDirectories"

    Hallo.

    Wie kann ich (wie mit FindFirst, FindNext, usw.) alle Ordner in einem bestimmten Ordner auflisten?

    Konkret:
    Es existiert ein Ordner: <b>C:\Bla\</b>
    In diesem sind die Ordner <b>Was\</b> und <b>Nochwas\</b>
    Und die Dateien <b>SoWieSo.log</b> und <b>Config.bak</b>

    Wenn ich mit FindFirst('C:\Bla\*', faDirectory, sr) und dementsprechend mit FindNext(sr) suche, findet es sowohl die Ordner als auch die Dateien.

    Ich benutze D5, Folgender Code <u>geht nicht!</u>:

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var sr: TSearchRec;
    i: Integer;
    List: TStringList;
    const Home = 'C:\Bla\';
    begin
    List := TStringList.Create;
    with List do
    begin
    i := 0;
    if FindFirst(Home+'*', faAnyFile, sr) = 0 then
    Add(sr.Name);
    while i >= 0 do
    begin
    if FindNext(sr) = 0 then
    Add(sr.Name)
    else
    i := - 1;
    end;
    FindClose(sr);
    end;
    Listbox1.Items := List;

    with List do
    begin
    Clear;
    i := 0;
    if FindFirst(Home+'*', faDirectory, sr) = 0 then
    Add(sr.Name);
    while i >=+ 0 do
    begin
    if FindNext(sr) = 0 then
    Add(sr.Name)
    else
    i := - 1;
    end;
    FindClose(sr);
    end;
    Listbox2.Items := List;
    end;
    If it's there and you can see it – it's REAL
    If it's there and you can't see it – it's TRANSPARENT
    If it's not there and you can see it – it's VIRTUAL
    If it's not there and you can't see it – it's GONE!

  • #2
    Hallo,

    dazu gab es hier schon mal einen Beitrag:
    Such mal nach 'ordner rekursiv'.
    Die Rekursivität ist es dann auch.

    Grüße
    Juli

    Comment


    • #3
      tach!

      versuche mal das hier:
      <pre>
      //Sucht nach Verzeichnissen Rekursiv
      procedure SearchDirectories(Startdirectory,mask: string;var erg : TStringList);
      var
      search: TSearchRec;
      directory: string;
      begin
      // Unterverzeichnisse
      directory := Startdirectory;
      directory := DirectorySlash(directory);
      if FindFirst(directory + '*.*', faDirectory, search) = 0 then
      begin
      repeat
      if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then begin
      if search.name = mask then
      begin
      erg.Add(directory + search.Name);
      end;
      SearchDirectories(directory+search.Name ,mask,erg);
      end;
      until FindNext(search) <> 0;
      end;
      FindClose(search);
      end;
      </pre>

      Gruß

      Marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Danke, Markus.
        Ich habe deine Lösung ausprobiert, aber ich brauche eigentlich einen Code, der innerhalb einem Ordner 'Delphi-Programme' alle Ordner, die ein Delphi-Projekt enthalten, findet und in einem Treeview anzeigt.
        Ich hatte eigentlich schon was gutes gefunden (<a href="http://www.swissdelphicenter.ch/de/showcode.php?id=400" Target="_Blank">HIER!</a>), aber das ging dann auch nicht.
        Gruß, Christian.

        PS:
        Gibt es zur Verwaltung von Delphi-Projekten eigentlich ein gutes Tool
        If it's there and you can see it – it's REAL
        If it's there and you can't see it – it's TRANSPARENT
        If it's not there and you can see it – it's VIRTUAL
        If it's not there and you can't see it – it's GONE!

        Comment


        • #5
          dann schreibe doch die suche um!

          probiere mal das hier:
          <pre>
          //Sucht dateien rekursiv, also auch in Unterverzeichnissen
          procedure SearchFilesInDirectories(mask: string;var erg : TStringList);
          var
          search: TSearchRec;
          directory: string;
          begin
          directory := ExtractFilePath(mask);
          // Sucht nach allen Dateien
          if FindFirst(mask, $23, search) = 0 then
          begin
          repeat
          // Fügt die dateien der ergebnisstringliste hinzu
          erg.Add(directory + search.Name);
          until FindNext(search) <> 0;
          end;

          // Subdirectories/ Unterverzeichnisse
          if FindFirst(directory + '*.*', faDirectory, search) = 0 then
          begin
          repeat
          if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then begin
          SearchFilesInDirectories(directory + search.Name + '\' + ExtractFileName(mask),erg);
          end;
          until FindNext(search) <> 0;
          FindClose(search);
          end;

          end;
          </pre>
          diese zeile:
          <b>erg.Add(directory + search.Name);</b>
          muss abgeändert werden!
          vielleicht so:
          <b>erg.Add(directory);</b>

          viel erfolg!

          marku
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment

          Working...
          X