Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Prüfen ob ein verzeichnis die gewünschte erweiterungen h

  Alt 15. Okt 2006, 17:08
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat