Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Alle Ordner eines Verzeichnises in einer Listbox auflisten (https://www.delphipraxis.net/89614-alle-ordner-eines-verzeichnises-einer-listbox-auflisten.html)

Dragon27 3. Apr 2007 10:26


Alle Ordner eines Verzeichnises in einer Listbox auflisten
 
Hallo,

ich möchte einfach in einer Listbox alle Ordner die im Verzeichnis C:/xyz/bbb stehen auflisten.....

Habe leider nur etwas ähnliches mit dem Treeview gefunden: Hier

Habt Ihr da eine Idee? Danke Für die Hilfe!

Gruß

Andy

stifflersmom 3. Apr 2007 10:32

Re: Alle Ordner eines Verzeichnises in einer Listbox auflist
 
Schau mal in der OH nach FindFirst, Findnext,
da findest Du schon alles was Du brauchst.

Moin

Dragon27 3. Apr 2007 10:47

Re: Alle Ordner eines Verzeichnises in einer Listbox auflist
 
Hallo,

danke für deine Antwort. Also ich habe schon was gefunden, aber das listet ja nur Dateien auf :-(

hier

Wie mache ich dann das ganze mit Ordnern?


Danke!

mkinzler 3. Apr 2007 10:50

Re: Alle Ordner eines Verzeichnises in einer Listbox auflist
 
Delphi-Quellcode:
...if LSearchRec.Attr and faDirectory = 1 then ...

scrat1979 3. Apr 2007 10:58

Re: Alle Ordner eines Verzeichnises in einer Listbox auflist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe mir vor kurzen eine kleine Komponente erstellt, mit welcher man genau das hinbekommen sollte :-) Leider habe ich sie (noch) nicht kommentiert, vielleicht wirst Du ja aus dem Source schlau...

Schnellanleitung der Grundfunktion:

1.) Komponente installieren und auf Form platzieren
2.) Einstellungen im OI vornehmen (Für "nur" Verzeichniss sollte es folgendermaßen aussehen:
faAnyFile = true, faDirsOnly = true.
3.) Untervereichnisse einschliessen? -> im OI aktivieren

Aufruf:

Delphi-Quellcode:
Listbox1.Items := AdvFileSearch1.SearchToList;
Ist evtl. mit Kanonen auf Spatzen geschossen, aber Du kannst Dir ja mal die Kernroutine anschauen und entsprechen anpassen.

Vielleicht hilft es Dir ja weiter...

SCRaT

Dragon27 3. Apr 2007 11:47

Re: Alle Ordner eines Verzeichnises in einer Listbox auflist
 
Hallo,

also ich habs jetzt mal so probiert:

Delphi-Quellcode:

function ListFiles(Box : TListbox) : Boolean;
var
LStrList: TStringlist;
LPfad: String;
LSearchRec: TSearchRec;
begin
LPfad := 'C:/';
Box.Items.Clear;
LStrList := TStringlist.Create;
if FindFirst(LPfad + '*.*', faAnyFile, LSearchRec) = 0 then
  begin
   repeat
    if LSearchRec.Attr and faDirectory = 1 then
     begin
      Box.Items.Add(LSearchRec.Name);
     end;
   until FindNext(LSearchRec) <> 0;
   FindClose(LSearchRec);
  end;
LStrList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ListFiles(Listbox1);
end;
Aber leider funktioniert das nicht :-(

Danke für Eure Hilfe!

Pfoto 3. Apr 2007 11:52

Re: Alle Ordner eines Verzeichnises in einer Listbox auflist
 
Hallo!

ich habe diesen Code-Schnipsel gefunden:


Delphi-Quellcode:
var VerzListe : TStringList;

function VerzGroesse(Verzeichnis:string):longint;
var SR     : TSearchRec;
    Groesse : longint;
begin
  Groesse:=0;
  if Verzeichnis[length(Verzeichnis)]<>'\' then
    Verzeichnis:=Verzeichnis+'\';
  if FindFirst(Verzeichnis+'*.*',$3F,SR)=0 then begin
    repeat
      if ((SR.Attr and faDirectory)>0) and (SR.Name<>'.') and (SR.Name<>'..') then
        Groesse:=Groesse+VerzGroesse(Verzeichnis+SR.Name)
      else
        Groesse:=Groesse+SR.Size;
      if (SR.Name<>'.') and (SR.Name<>'..') then
        VerzListe.Add(Verzeichnis+SR.Name);
    until FindNext(SR)<>0;
    FindClose(SR);
  end;
  Result:=Groesse;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  VerzListe:=TStringList.Create;
  Label1.Caption:=IntToStr(VerzGroesse('C:\Programme'))+' Byte';
  ListBox1.Items.Assign(VerzListe);
  VerzListe.Free;
end;

Es rechnet nebenbei noch die Größe aller eingelesenen
Verzeichnisse ein; kannst du ja nach Deinen Wünschen anpassen...

Gruß
Pfoto

scrat1979 3. Apr 2007 12:36

Re: Alle Ordner eines Verzeichnises in einer Listbox auflist
 
Zitat:

Zitat von Dragon27
Hallo,

also ich habs jetzt mal so probiert:

[...]

Aber leider funktioniert das nicht :-(

Danke für Eure Hilfe!

Ändere es mal so ab (an sonsten wie gesagt, schau Dir mal die Prozedur in meiner Komponente an!)


Delphi-Quellcode:
function ListFiles : TStringList; // Rückgabewert
var
LStrList: TStringlist;
LPfad: String;
LSearchRec: TSearchRec;

begin
LPfad := 'C:\'; // NICHT "C:/", weiß nicht, ob es sonst klappen würde
LStrList := TStringlist.Create;

if FindFirst(LPfad + '*.*', faAnyFile, LSearchRec) = 0 then
  begin
   repeat
    if (LSearchRec.Attr and faDirectory) = 1 then // Klammern gesetzt
     begin
      LStrList.Add(LSearchREc.Name);
     end;
   until FindNext(LSearchRec) <> 0;
   FindClose(LSearchRec);
  end;

Result := LStrList; // Ergebnis als StringList zurückgeben
LStrList.Free;
end;
Aufruf:
Delphi-Quellcode:
Listbox1.Items := ListFiles;
Ob jetzt Deine eigentliche Suchfunktion korrekt programmiert ist, habe ich gerade leider keine Zeit zu testen. Rekursives Suchen dürfte so aber auf jeden Fall (falls nötig) nicht möglich sein. Evtl. könntest Du noch einen Parameter "function listfiles(dir : string) : TStringList" einbauen, damit man der Funktion noch das Verzeichnis übergeben kann, welches man auflisten möchte...

Ich hatte mal das ein komisches Verhalten, dass Verzeichniss nur gefunden wurden, wenn man statt "*.*" nur "*" eingegeben hat. Hat sich dann allerdings beim weiteren Programmieren in Luft aufgelöst!?! Evl. auch einen Versuch wert.

.. und weil das Editieren soo viel Spass macht:

Achte darauf, dass der Pfad, wenn nicht grad "c:\" immer mit einem "\" abgeschlossen wird. Also z.B. "c:\test\" und NICHT "c:\test", sonst pass ja der Ausdruck "LPfad + '*.*'" nicht mehr...

Viel Glück :-)

SCRaT


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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 by Thomas Breitkreuz