Moin Michael,
Zitat von
mimi:
also ist sr.name[1] das erste zeichen und sobalt da ein .. oder . wird es ausgelassen.
Stimmt, aber genau das ist falsch, denn ein Verzeichnis darf durchaus mit einem Punkt beginnen (eine Datei auch).
Heisst ein Verzeichnis,z.B., ".temp", so wird es bei der Abfrage auf sr.name[1] auch ausgelassen, es sollen ja aber wohl nur die Verzeichnisse . und .. ausgelassen werden.
Diese Zeile
if (SR.Name[1]<>'.') and ((sr.Attr or faAnyFile) = faAnyFile) and (pos(UpperCase(ExtractFileExt(sr.name)),AMask) > 0)then
Müsste so aussehen:
if (SR.Name <> '.') and (SR.Name <> '..') and ((sr.Attr AND faDirectory) = 0) and (pos(LowerCase(ExtractFileExt(sr.name)),AMask) > 0)then
Erklärung:
(SR.Name <> '.') and (SR.Name <> '..')
siehe oben.
((sr.Attr AND faDirectory) = 0)
Ist das Bit, dass ein Directory anzeigt gesetzt, so ist das Ergebnis der AND-Verknüpfung mit der Maske faDirectory = faDirectory bzw. <> 0. Ist das Bit nicht gesetzt (=> Kein Verzeichnis), so ist das Ergebnis = 0.
Wieso hier faAnyFile nicht in Frage kommt, habe ich ja schon weiter oben erklärte (zumindest habe ich es versucht
)
(pos(LowerCase(ExtractFileExt(sr.name)),AMask) > 0)
Gemäss Deiner Vorgabe entählt AMask eine Reihe von Erweiterungen in der Form .ext.ext.ext für mein Verständnis also in Kleinschreibung. Deshalb UpperCase durch LowerCase ersetzt. Um ganz sicher zu gehen, kannst Du auch beide Bestandteile von Pos auf die gleiche Schreibweise umwandeln. Evtl. sogar mit AnsiUpperCase oder AnsiLowerCase, falls die Erweiterung Umlaute enthält.