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 Ordner in einer Listbox auflisten (https://www.delphipraxis.net/43859-ordner-einer-listbox-auflisten.html)

ZERO_COOL 9. Apr 2005 17:23


Ordner in einer Listbox auflisten
 
Ich habe ein kleines Problem ...
Wie kann man Ordner die sich in einem anderen Ordner befinden in einer Listbox auflisten.

Beispiel:
Der Ordner heißt c:\test
in diesem Ordner befinden sich weitere Ordner:
1
2
3 ...
Jetzt müsste die Listbox so ausschauen:
1
2
3

Ich hoffe ihr versteht was ich meine und hoffentlich kann mir wer helfen.

Matze 9. Apr 2005 17:24

Re: Ordner in einer Listbox auflisten
 
Einfach den Code von FindAllFilesFindAllFiles so abändern, dass er nur die Ordner auflistet.


Nachtrag: Schnell hingetippt (nicht sehr performant):

Delphi-Quellcode:
function TForm1.IsInListBox(FileName: string): boolean;
var i: integer;
begin
  result := false;

  for i := 0 to ListBox1.Items.Count - 1 do
  begin
    if ListBox1.Items[i] = FileName then
    begin
      result := true;
      break;
    end;
  end;
end;

procedure TForm1.FindAllFolders(RootFolder: string; Recurse: Boolean = True);
var
  SR: TSearchRec;
begin
  if AnsiLastChar(RootFolder)^ <> '\' then
    RootFolder := RootFolder + '\';
  if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
      try
        repeat
          if SR.Attr and faDirectory = faDirectory then
            if (SR.Name <> '.') and (SR.Name <> '..') then
            begin
              FindAllFolders(RootFolder + SR.Name, Recurse);
              if not IsInListBox(RootFolder) then
              begin
                ListBox1.Items.Add(RootFolder);
                Application.ProcessMessages;
              end;
            end;
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FindAllFolders('c:\');
end;

ZERO_COOL 9. Apr 2005 18:38

Re: Ordner in einer Listbox auflisten
 
Danke schon mal
aber da sind zwei Sachen die ich nicht so gut gebrauchen kann
1. Er listet auch die Unterordner auf. Ich brauch blos die die in dem Verzeichniss sind das ich ausgewählt habe.
2. ich brach nur den letzten Ordnername one das C:\... davor

Ist das möglich? Währe echt wichtig

SirThornberry 9. Apr 2005 19:14

Re: Ordner in einer Listbox auflisten
 
dann bau das doch um. Die unterordner vermeidest du indem du die rekursion verhinderst und den puren ordnernamen ohne pfad davor bekommst du direkt vom TSearchRec...
Die Infos sind absichtlich so sperlich da ich den eindruck habe das du den source nicht verstanden hast und du somit nicht wirklich programmierst sondern einfach dein Programm aus bausteinen anderer zusammensetzt ohne diese zu verstehen.
Auf diese Art und weise hoff ich das du versuchst den source zu verstehen und somit irgendwann auch besser wirst... (in sachen programmieren)

ZERO_COOL 10. Apr 2005 09:19

Re: Ordner in einer Listbox auflisten
 
@ SirThornberry
hast ja vollkommen recht kannst du mir den Quelltext mal erklären??

Airblader 10. Apr 2005 09:26

Re: Ordner in einer Listbox auflisten
 
@Matze

was passiert, wenn ich als Pfas z.B. "ordner/" mache? dann baut das script ja fälschlicherweise in "ordner/\" um.

air

Nogge 10. Apr 2005 17:24

Re: Ordner in einer Listbox auflisten
 
Delphi-Quellcode:
Procedure FindDirs(DirPath: String; StringList:TStrings; Recurse: Boolean = false);
var SR:TSearchRec;
begin
  if AnsiLastChar(DirPath)^ <> '\'
  then DirPath:=DirPath + '\';
  try
    { im angegebenen Verzeichniss nach Unterordnern suchen -- }
    if FindFirst(DirPath+'*.*',faDirectory,SR)=0 then
    repeat
      { wenn SR ein Ordner ist und nicht '.' und '..' heißt, dann... }
      if ((SR.Attr and faDirectory)<>0) and (SR.Name <> '.') and (SR.Name <> '..') then
      begin
        { ...füge den Ordner der StringList (z.B. einer Listbox(.Items)) hinzu }
        StringList.Add(DirPath+SR.Name+'\'); // s.u. Erläuterung
        { wenn Recurse = true, dann durchsuche den aktuellen Ordner (SR.Name) nach Unterordnern }
        if Recurse then FindDirs(DirPath+SR.Name,StringList,true);
      end;
    until FindNext(SR) <> 0; // wenn keine Unterordner mehr gefunden wurden, Suche beenden
  finally
    FindClose(SR); // Search Handle schließen, da es nicht mehr gebraucht wird
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  FindDirs('c:',listbox1.Items);
end;
Wenn du jetzt nur den Ordnernamen anzeigen lassen möchtest, dann schreibe nur 'StringList.Add(SR.Name);' wie es SirThornberry schon vorgeschlagen hatte.

@Airblader: Du hast ja recht mit deiner Vermutung, aber wieso sollte das Verzeichnis so heißen? Das wäre dann ja nur ein Schreibfehler vom Programmierer, denn bei Windows ist es unmöglich, ein Verzeichnis so zu benennen.

ZERO_COOL 10. Apr 2005 18:14

Re: Ordner in einer Listbox auflisten
 
Vielen Dank

Airblader 10. Apr 2005 18:43

Re: Ordner in einer Listbox auflisten
 
@Nogge

nein, das mein ich nicht.
die funktion erwartet doch als ordner entweder etwas a la "ordner" oder "ordner\"
wobei das backslash automatisch geaddet wird, wenn es fehlt.

aber es gibt leute, die geben als pfad "ordner/" an, wobei der ordner natürlich nur "ordner" heißt

air


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 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