Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

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

Re: probleme verzeichnisse zu suchen

  Alt 2. Mai 2008, 17:31
Moin 1ermehr,

auch wenn es jetzt so bei Dir wohl funktioniert, wie Du es Dir vorstellst, habe ich noch ein paar Anmerkungen

FindFirst ist eine Funktion, die mit ihrem Rückgabewert kenntlich macht, ob sie erfolgreich aufgerufen wurde.
Hier fehlt mir die Prüfung, und entsprechende Verzweigung.

Durch einen erfolgreichen Aufruf von FindFirst, wird eine Resource belegt, nämlich ein Handle durch TSearchRec.
Deshalb sollte sichergestellt werden, dass die Resource auch wieder freigegeben wird (try-finally => Resourcenschutzblock)

Delphi-Quellcode:
if FindFirst(...) <> 0 then exit;
try
//... mach was mit der Resource
finally
  FindClose(...);
end;
Da FindFirst intern FindFirstFile aufruft, und diese Funktion nur die Namesmaske zur Prüfung heranzieht, nicht aber die Attribute (das macht, teilweise FindFirst), fährt man, i.d.R. besser, wenn man immer faAnyFile angibt, und dann, nach Bedarf, selber filtert.

Diese Prüfung:

if fts.Attr = faDirectory then ... setzt voraus, dass auch nur das Attribut für ein Directory gesetzt ist. Es kann aber auch versteckt sein, ausserdem verwendet Windows intern das ReadOnly-Flag für Verzeichnisse (wenn sich Windows dabei verhaspelt, kann man schon mal ein schreibgeschütztes Verzeichnis bekommen )
Besser wäre es so abzufragen:

if (fts.Attr and faDirectory) = faDirectory then ...
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