Entwickler-Ecke

Dateizugriff - Nur Ordner einlesen


Anonymous - Mo 10.02.03 08:34
Titel: Nur Ordner einlesen
Irgendwie komme ich nicht weiter. Ich will nur die Ordner eines Verzeichnisses auslesen (also ohne Dateinamen). Zwar hab ich das noch nie gemacht, ich war mir aber sicher, daß man da an FindFirst nur das faDirectory übergeben muß. Ist aber nicht so. Mit dem Attribut FindFirst werden alle Dateien ausgelesen (zumindest bei mir). Hat einer eine Idee wie man das zu laufen kriegt.

Hier der Code den ich benutze.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure GetAllFilesF(PathAndMask: String; Sl: TStrings);
var Search: TSearchRec; i, Attrib: Integer;
begin
  Attrib := faDirectory; 

  Sl.Clear;
  if FindFirst(PathAndMask, Attrib, Search) = 0 then
    repeat Sl.Add(Search.Name) until FindNext(Search) <> 0;

  for i := Sl.Count - 1 downto 0 do
    if (Sl.Strings[i] = '.') or (Sl.Strings[i] = '..') then Sl.Delete(i);
end;


Es wird ein Pfad mit Maske übergeben. Das Ergebnis landet in der Listbox.


Delete - Mo 10.02.03 09:21

Hi Popov. Ich benutze meist das Attribut faAnyFile und teste vor der Darstellung im Programm, ob es sich wirklich um einen Ordner handelt:

Quelltext
1:
2:
3:
if(Search.Attribute and faDirectory <> 0) and
  (Search.Name <> '.') and (Search.Name <> '..') then
S1.Add(Search.Name);


btw: Für Listboxen gibt´s übrigens noch die Nachricht "LB_DIR", mit der du die Ordner noch einfacher einlesen kannst. Habe ich nie ausprobiert, aber ich bin im PSDK darüber gestolpert.


Anonymous - Mo 10.02.03 17:54

Danke. Die Möglichkeit mit der Nachricht "LB_DIR" kenne ich auch. Allerdings braucht man das so selten, daß man, wenn man es braucht, meistens garnicht draufkommt oder es auf die Schnelle nicht hinkriegt.


AndyB - Mo 10.02.03 18:31

Was mit bei
Zitat:

Quelltext
1:
2:
if FindFirst(PathAndMask, Attrib, Search) = 0 then 
    repeat Sl.Add(Search.Name) until FindNext(Search) <> 0;

fehlt, ist ein FindClose(Search).


Anonymous - Mo 10.02.03 22:33

Hast du recht. Sehe ich auch gerade.