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 Verzeichnissliste in Listbox (https://www.delphipraxis.net/54569-verzeichnissliste-listbox.html)

Koller 6. Okt 2005 17:24


Verzeichnissliste in Listbox
 
Gibt es eine Funktion der man ein Verzeichnis übergibt und wo dann alle Unterverzeichnisse in einer Listbox angezeigt werden können? Halt sowas wie ne Shelltreeview, nur weiß ich nich wie ich das übers netzwerk übertragen soll weil man ja mit listbox1.commtatext einen String bauen kann. Es soll ein Program zum DAteien hin und her kopieren werden.

Koller

Khabarakh 6. Okt 2005 17:45

Re: Verzeichnissliste in Listbox
 
Eine fertige Funktion gibt es AFAIK nicht, aber die kannst du dir mit Delphi-Referenz durchsuchenFindFirst, Delphi-Referenz durchsuchenFindNext und Delphi-Referenz durchsuchenFindClose selbst zusammenbasteln.

jfheins 6. Okt 2005 18:11

Re: Verzeichnissliste in Listbox
 
In der DP gibt alles :mrgreen:

Man schaue in die Code-Library: http://www.delphipraxis.net/internal...?p=18063#18063

Khabarakh 6. Okt 2005 18:16

Re: Verzeichnissliste in Listbox
 
Er braucht aber nur die Verzeichnisse :P . Aber man kann die Funktion ja als Vorlage benutzen, dann hat man sich schon viel Arbeit gespart.

torud 23. Nov 2005 13:21

Re: Verzeichnissliste in Listbox
 
Also ich stehe nun vor dem gleichen Problem, dass ich ein Verzeichnis habe, in dem sich diverse Ordner befinden, die ich einlesen und auflisten muss. Wie kann ich also die von Euch angepriesene Routine umschreiben? (http://www.delphipraxis.net/internal...?p=18063#18063)

Dort gehts doch immer um Dateien a´la *.*
Ich suche aber Ordner. Ich weiss, das sind auch nur Dateien im weitesten Sinn, aber wie gehts denn nun?

Khabarakh 23. Nov 2005 13:27

Re: Verzeichnissliste in Listbox
 
Die Lösung steht doch schon im Code:
Delphi-Quellcode:
if Recurse then
  if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
    try
      repeat
        if SR.Attr and faDirectory = faDirectory then
          // --> ein Verzeichnis wurde gefunden
          //   der Verzeichnisname steht in SR.Name
          //   der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
          //       RootFolder + SR.Name
Hier kannst du dann die Ordner in die StringList werfen. Die rekursive Suche kannst du ja entfernen, wenn du keine Unterordner brauchst.

torud 24. Nov 2005 11:41

Re: Verzeichnissliste in Listbox
 
Mein Problem ist, dass ich nicht wirklich rekursiv suchen will sondern nur alle direkten Unterordner eines Verzeichnisses finden will.

Ich habe es jetzt mal so probiert, aber es will mir einfach nicht gelingen...

Delphi-Quellcode:
procedure GetDirectoriesInDirectory(ADirectory: string; AMask: String; AList: TStrings; ARekursiv: Boolean);
var
  SR: TSearchRec;
begin
  if ARekursiv then
    if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then
    begin
      repeat
        if SR.Attr and faDirectory = faDirectory then
          AList.Add(sr.Name);
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;
Ich erhalte alle Unterordner aber auch 2 Einträge mit . und ..

shmia 24. Nov 2005 12:16

Re: Verzeichnissliste in Listbox
 
Zitat:

Zitat von torud
Ich erhalte alle Unterordner aber auch 2 Einträge mit . und ..

Das sind virtuelle Verzeichnisse, die ausgefiltert werden müssen:
Delphi-Quellcode:
if (SR.Attr and faDirectory = faDirectory) and (sr.Name<>'.') and (sr.Name<>'..') then
   AList.Add(sr.Name);

torud 24. Nov 2005 12:27

Re: Verzeichnissliste in Listbox
 
Da lag ich ja gar nicht so falsch mit meiner Herangehensweise

Delphi-Quellcode:
      repeat
        if SR.Attr and faDirectory = faDirectory then
          if not(sr.name='.') and not(sr.name='..')then AList.Add(sr.Name);
      until FindNext(SR)<>0;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 Uhr.

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