Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Problem mit FindFirst und Dateiendungen

  Alt 20. Dez 2006, 22:58
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
  Mit Zitat antworten Zitat