Hallo Helmi,
Zitat von
Helmi:
Wenn ich sowieso ein zweites mal prüfen muss ob die Endung pass, dann kann ich ja bei FindFirst alle Dateien suchen lassen (*.*)
Warum läßt du dir alle Dateien im Verzeichnis liefern, wenn dich nur eine Teilmenge interessiert? Damit schickst du ja auch alle Dateienamen durch
UpperCase und einen Stringvergleich.
Zitat:
So brauch ich mir die Endung nicht speichern.
einzigste Änderung im normalen Code: anstatt "*.msk*, muss ich jetzt ".msk" schreiben
Dadurch wird die Routine aber auch unflexibler, weil sie Masken wie 'Level*.msk' nicht mehr unterstützt. Und das nur, weil du eine (lokale) Variable sparen möchtest?
Ich habe noch etwas festgestellt: bei der Verwendung von Jokerzeichen ('?' bzw. '*') in der Maske für die Namenserweiterung darf kein Vergleich der Extensions stattfinden, weil dieser Vergleich immer fehlschlagen würde. Die notwendigen Änderungen habe ich im folgenden Quelltext markiert:
Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String; List: TStrings);
var
ext : string;
wild : Boolean; // neu
SR: TSearchRec;
begin
List.BeginUpdate;
try
List.Clear;
If Directory <> '' then
begin
ext := ExtractFileExt(Mask);
wild := (Pos('?', ext) > 0) or (Pos('*', ext) > 0); // neu
Directory := IncludeTrailingPathDelimiter(Directory);
If FindFirst(Directory + Mask, faAnyFile and (not faDirectory), SR) = 0 then
try
repeat
if wild or SameText(ExtractFileExt(SR.Name), ext) then // geändert
List.Add(Directory + SR.Name)
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
finally
List.EndUpdate;
end;
end;
Ein Mangel läßt sich auf diesem Weg nicht so einfach umgehen: eine Maske wie '*.m??' liefert dir auch Dateinamen, deren Extension nicht genau drei Zeichen enthält.
Auch wenn du nicht alle Features der Routine im aktuellen Projekt brauchst, solltest du sie nicht entfernen - sie stören ja nicht. Irgendwann benötigst du sie vielleicht, und dann kannst du diese Funktion ohne Änderung wiederverwenden.
Gruß Hawkeye