Hallo Helmi,
der Grund für das Verhalten von FindFirst/FindNext ist die Unterstützung der "alten" Dateinamen im 8.3-Format. Windows speichert zu jedem langen Dateinamen auch den passenden kurzen Dateinamen und überprüft diesen bei einer Suche ebenfalls. Der Namensanteil wird dabei mit einer Tilde (~) und einer fortlaufenden Nummer versehen, die Erweiterung nach 3 Zeichen abgeschnitten.
Die einzige Abhilfe hat dir
litsa bereits genannt: eine zusätzliche Überprüfung der gefundenen Dateien. Wenn du dann noch das Funktionsergebnis beim Aufruf von
IncludeTrailingPathDelimiter verwertest und Christians Hinweis berücksichtigst, dann sollte es funktionieren:
Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String; List: TStrings);
var
ext : string; // neu
SR: TSearchRec;
begin
List.BeginUpdate;
try
List.Clear;
If Directory <> '' then
begin
ext := ExtractFileExt(Mask); // neu
Directory := IncludeTrailingPathDelimiter(Directory); // Funktionsergebnis nicht verwerfen!
If FindFirst(Directory + Mask, faAnyFile and (not faDirectory), SR) = 0 then // Hinweis von Christian
try
repeat
if SameText(ExtractFileExt(SR.Name), ext) then // neu
List.Add(Directory + SR.Name)
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
finally
List.EndUpdate;
end;
end;
Gruß Hawkeye