Entwickler-Ecke

Dateizugriff - faDirectory=faAnyFile?


Heiko - Sa 06.08.05 11:24
Titel: faDirectory=faAnyFile?
Ich habe folgenden Quelltext:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if FindFirst(FileDir+'*.*', faAnyFile, SearchRec)=0 then
 begin
  repeat
   if (SearchRec.Attr=faDirectory) and (SearchRec.Name<>'.'and (SearchRec.Name<>'..'then
    begin
     ...
    end
  until not (FindNext(SearchRec)=0);
 end


Da ich ja nur die Ordner haben will habe ich jetzt den Quelltext darauf reduziert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if FindFirst(FileDir+'*.*'faDirectory, SearchRec)=0 then
 begin
  repeat
   if (SearchRec.Name<>'.'and (SearchRec.Name<>'..'then
    begin
     ...
    end
  until not (FindNext(SearchRec)=0);
 end


Wenn ich allerdings in der Zeile
if (SearchRec.Name<>'.'and (SearchRec.Name<>'..'then einen Haltepunkt setzte und mir SearchRec.Name auswerten lasse, sehe ich dass er dort auch andere Dateien findet als nur die Ordner, obwohl es ja eigentlich durch faDirectory nicht sein dürfte. Weiß einer von euch woran das liegt?


AXMD - Sa 06.08.05 11:40

Ich bin mir nicht sicher, ob das mit den Verzeichnissen in FindFirst so funktioniert. Ansonsten such einfach alle und filter dann die Verzeichnisse raus:


Delphi-Quelltext
1:
if (searchrec.Attr and faDirectory) = faDirectory ...                    


Außerdem: Ordner sind IMHO nicht *.*, sondern nur *, weil sie keinen Punkt beinhalten. Vielleicht liegt's ja daran...

AXMD


Heiko - Sa 06.08.05 13:41

Also so wie ich es bisher hatte.

@Dein Vorschlag: Bringt logischwerweise auch nix, da *-->test.mp3 auch sein kann.


AXMD - Sa 06.08.05 13:48

user profile iconHeiko hat folgendes geschrieben:
Also so wie ich es bisher hatte.


Nein. Schau dir mein if genau ein - da ist ein Unterschied!

AXMD


Heiko - Sa 06.08.05 13:59

Stimmt :oops: , aber was bringt hier die kombination durch das and?


uall@ogc - Sa 06.08.05 14:01

die and verknüpfung schaut ob die bitmaske (das bit) von faDirectory gesetzt ist


AXMD - Sa 06.08.05 14:09

user profile iconuall@ogc hat folgendes geschrieben:
die and verknüpfung schaut ob die bitmaske (das bit) von faDirectory gesetzt ist


Exakt. Falls du den Quelltext hast, einfach mal in die Windows.pas (ich glaub dort is es) schauen (nach der Deklaration von faDirectory)

AXMD


uall@ogc - Sa 06.08.05 14:14


Delphi-Quelltext
1:
  faDirectory = $00000010; @ sysutils                    


-> mit or kann man die bitmasken setzen


Delphi-Quelltext
1:
maske := maske or faDirectory;                    


aulesen mit and


Delphi-Quelltext
1:
if (maske and faDirectory) = faDirectory then                    


das faDirectory in der FindFirst funktion klappt bei mir auch nicht
es wird immer nach faAnyFile gesucht (muss windows eh machen)

muss man halt danach prüfen mit


Delphi-Quelltext
1:
2:
 
if (maske and faDirectory) = faDirectory then


obs wirklich nen ordner ist


StefanH - Sa 06.08.05 14:33
Titel: Re: faDirectory=faAnyFile?
Es folgt: mein Lieblingspost ;)

user profile iconHeiko hat folgendes geschrieben:
Wenn ich allerdings in der Zeile
if (SearchRec.Name<>'.'and (SearchRec.Name<>'..'then einen Haltepunkt setzte und mir SearchRec.Name auswerten lasse, sehe ich dass er dort auch andere Dateien findet als nur die Ordner, obwohl es ja eigentlich durch faDirectory nicht sein dürfte. Weiß einer von euch woran das liegt?


Jep. Kann ich dir sagen: Wir setzen den Eingabecursor (dieses Blinkdings halt) auf das Wort "FindFirst" und drücken F1. Wir wählen die Funktion, nciht das vom DataSet. Es öffnet sich ein tolles Fenster, da steht gaaaaaanz viele lustige Sachen drin. Unter "Beschreibung" suchen wir uns en Teil über den Parameter, um den es geht (Attr) und siehe da:

Zitat:
Der Parameter Attr gibt an, welche speziellen Dateien zusätzlich zu den normalen Dateien angezeigt werden.


bütteschon. ;) und sry wg der Blödellaune *qq*


Heiko - Sa 06.08.05 14:55

Und was meinen die mit normalen Dateien? Bei mir ist jede Datei "normal", ob die nun Schreibgeschützt ist oder nicht.


StefanH - Sa 06.08.05 15:00

user profile iconHeiko hat folgendes geschrieben:
Und was meinen die mit normalen Dateien? Bei mir ist jede Datei "normal", ob die nun Schreibgeschützt ist oder nicht.


bei mir auch :shock: kA. aber du wolltest ja wissen, warum du nicht nur Ordner bekommst ;)


uall@ogc - Sa 06.08.05 15:50

faSpecial = faHidden or faSysFile or faVolumeID or faDirectory;

das is nicht "normal" dazu gehören auch die ordner ;P


Heiko - Sa 06.08.05 16:02

Und warum gibt es dann faReadOnly wenn es eine normale Datei ist?


uall@ogc - Sa 06.08.05 16:16

vielleicht werden ide fa Konstanten nicht nur zum suchen verwendet

schau dir einfach besser mal den source an...


drstar - Mi 17.08.05 16:31

Zum Thema * und *.* bei Ordnern möchte ich mal soviel sagen: Es kommt durchaus häufiger vor, daß Ordner einen Punkt beinhalten (vor allem Systemordner können davon betroffen sein...) und diese dann z. . die CLSID aus der Registry als Extension tragen.
Ich würde deshalb empfehlen, als Suchmaske *.* zu verwenden.