Zitat von
richard_boderich:
Meine Frage wäre, ob diese Abfrage auch funktioniert, wenn ich ein Verzeichnis habe, was z.B. versteckt ist. Also die Attribute faDirectory und faHidden besitzt oder z.B. faDirectory und faHidden und faSysfile.
Ja, der Code würde immer dann ansprechen, wenn das Attribut für ein Verzeichnis gesetzt ist. Welche Attribute zusätzlich gesetzt sind, geht in dieser Abfrage nicht mit rein.
Diese Bitmasken kannst du mit einer Menge übersetzen (wobei Delphi dies bei Sets andersherum sogar macht). Du prüfst nun damit nur ab, ob das Attribut "Directory" in dieser Menge ist. Ob andere Elemente in der Menge sind, fragst du ja nicht. Somit werden auch versteckte, als System etc. gekennzeichnete Einträge auch mit durchgelassen - Hauptsache das Bit für ein Verzeichnis ist gesetzt.
Wenn du dir die Konstanten anschaust (also faDirectory, faReadOnly, faSystem, etc), dann stellt man leicht fest, dass es immer nur einzelne Bits sind. Mit der AND Operation führst du ein binäres UND durch und maskierst damit alle anderen Bits, bis auf die gesetzten des 2. Parameters, aus. Da dein zweiter Parameter nur ein Bit gesetzt hat, ist nach der UND Verknüpfung entweder genau das Bit gesetzt oder gar keins.
Wir hatten gerade ein paar
ausführliche Erklärungen dazu. Dort hatten wir alle zusammen das eigentlich ganz gut erklärt. Dann wird das bestimmt auch etwas klarer warum und wie das ganze funktioniert.