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
Heiko 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
uall@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 ;)
Heiko 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
Heiko 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!