Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unterordner eines Ordners suchen (https://www.delphipraxis.net/55811-unterordner-eines-ordners-suchen.html)

Van HelF 27. Okt 2005 11:39


Unterordner eines Ordners suchen
 
Ich habe ein problem, und zwar will ich ein programm schreiben, dass mir alle UNTERORDNER (und auch deren) anzeigt.
Ich möchte darauf hinweisen, dass ich sehr wohl die forumsuche und google dazu genutzt habe entsprechende beispiele zu finden, bisher jedoch ohne erfolg. Prinzipiell wurde dann immer auf "dateien in unterordnern suchen" verwiesen, aber das will ich ja nicht.
Ich bräuchte ein beispiel, wie man sich nur die unterordner(und deren) eines ordners in einer listbox ausgeben lassen kann.

Khabarakh 27. Okt 2005 11:52

Re: Unterordner eines Ordners suchen
 
Du kannst mir nicht erzählen, dass dir die Suche nicht Delphi-Referenz durchsuchenFindFirst ausgespuckt hat :wink: . Besonders der zweite Parameter dürfte interessant sein. Wie man die Funktion (+ FindNext und FindClose) verwendet, siehst du zum Beispiel bei FindAllFilesFindAllFiles.

St.Pauli 27. Okt 2005 11:56

Re: Unterordner eines Ordners suchen
 
Man muss sich ja nicht mit FindFirst / FindNext rumschlagen. In der Codelib sind ja auch Beiträge zum suchen von Dateien, die dann einfach ein bisschen umschreiben... :wink:

Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String;
                              List: TStrings;
                              WithSubDirs, ClearList: Boolean);

procedure ScanDir(const Directory: String);
var
  SR: TSearchRec;
  Dir : string;
begin
  if FindFirst(Directory + Mask, faAnyFile, SR) = 0 then try
    repeat
      Application.ProcessMessages;
      IF (Dir <> Directory) THEN
        begin
          List.Add(Directory);
          Dir := Directory;
        end;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        Application.ProcessMessages;
        if ((SR.attr and faDirectory) = faDirectory) and
           (SR.Name <> '.') and (SR.Name <> '..') then
          ScanDir(Directory + SR.Name + '\');
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
      List.Clear;
    if Directory = '' then Exit;
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
Aufruf:

Delphi-Quellcode:
GetFilesInDirectory('C:\', '*.*', ListBox1.Items, True, True);
Natürlich ist die Methode etwas zeitintensiv....

Edit1: Application.ProcessMessages... :oops:

marabu 27. Okt 2005 11:56

Re: Unterordner eines Ordners suchen
 
Wenn alle Stricke reißen - die DirectoryListBox aus der Palette "Win 3.1" kann vielleicht schon alles, was du willst.

Grüße vom marabu

Van HelF 27. Okt 2005 12:00

Re: Unterordner eines Ordners suchen
 
Sicher kenne ich findfirst ich habe auch schon versucht eine function hier im forum umzubasteln (durch ändern von faanyfile, in fadirectory) hat jedoch nicht den gewünschten effekt erbracht. Hat mir trotzdem noch dateien angezeigt.

Zur directorylistbox: die verwende ich monentan, nur es haben sich einige probleme damit ergeben, deswegen suche ich einen anderen weg

St.Pauli 27. Okt 2005 12:09

Re: Unterordner eines Ordners suchen
 
Zitat:

Zitat von Van HelF
Sicher kenne ich findfirst ich habe auch schon versucht eine function hier im forum umzubasteln (durch ändern von faanyfile, in fadirectory) hat jedoch nicht den gewünschten effekt erbracht. Hat mir trotzdem noch dateien angezeigt.

Look @ meine Funktion. Einfach die Parameter Attribute belassen und mim String altes und neues Directory vergleichen...

Van HelF 27. Okt 2005 12:12

Re: Unterordner eines Ordners suchen
 
Ich verstehe nicht ganz was du meinst, bzw damit bezweckst ...

marabu 27. Okt 2005 12:16

Re: Unterordner eines Ordners suchen
 
Hier das ganze in Grün - aber mit TreeView zur Visualisierung:

Delphi-Quellcode:
procedure AllFolders(root: string; nodes: TTreeNodes; tnParent: TTreeNode);
var
  sr: TSearchRec;
  tn: TTreeNode;
begin
  root := IncludeTrailingPathDelimiter(root);
  if FindFirst(root + '*.*', faAnyFile, sr) = 0 then
  try
    repeat
      Application.ProcessMessages;
      if (sr.Name <> '.')
      and (sr.Name <> '..')
      and ((sr.Attr and faDirectory) = faDirectory) then
      begin
        tn := nodes.AddChild(tnParent, sr.Name);
        AllFolders(root + sr.Name, nodes, tn);
      end else
        Continue;
    until FindNext(sr) <> 0;
  finally
    FindClose(sr);
  end;
end;

procedure TDemoForm.ListButtonClick(Sender: TObject);
begin
  with TreeView do
  begin
    Items.Clear;
    Items.BeginUpdate;
    AllFolders('C:\DATEN', Items, nil);
    Items.EndUpdate;
  end;
end;
marabu

Van HelF 27. Okt 2005 12:28

Re: Unterordner eines Ordners suchen
 
Ich danke, habe es auf eine listbox umgeschrieben und es funktioniert ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz