Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
Delphi 12 Athens
|
Re: Ordnernamen auslesen
25. Apr 2009, 10:31
Meinst Du so etwas?
Delphi-Quellcode:
procedure ListSubDirsContainingFiles(StartPath: string;
const Extension: string;
const sList: TStrings);
var Rec: TSearchRec;
FileFound: Boolean;
begin
//Bei ungültigem Verzeichnis Exception auslösen
if not DirectoryExists(StartPath) then
raise Exception.CreateFmt(' Verzeichnis "%s" existiert nicht.',
[ExcludeTrailingPathDelimiter(StartPath)]);
//Sicherstellen, dass Verzeichnisname mit Backslash endet
StartPath := IncludeTrailingPathDelimiter(StartPath);
//lokale Variable initialisieren
FileFound := false;
//im aktuellen Verzeichnis nach Dateien mit der angegebenen Endung suchen
if FindFirst(StartPath + Extension,faAnyFile,Rec) = 0 then
try
repeat
//nur Dateien, keine Verzeichnisse
FileFound := (Rec.Attr and faDirectory) = 0;
until FileFound or (FindNext(Rec) <> 0);
finally
SysUtils.FindClose(Rec);
end;
//bei Treffer Verzeichnis zur Liste hinzufügen
if FileFound then
sList.Add(ExcludeTrailingPathDelimiter(StartPath));
//nun nach Unterverzeichnissen suchen und rekursiv durchgehen
if FindFirst(StartPath + ' *',faDirectory,Rec) = 0 then
try
repeat
if ((Rec.Attr and faDirectory) = faDirectory) and
(Rec. Name <> ' .') and (Rec. Name <> ' ..') then
ListSubDirsContainingFiles(StartPath + Rec. Name,Extension,sList);
until FindNext(Rec) <> 0;
finally
SysUtils.FindClose(Rec);
end;
end;
Ich hoffe, ich habe verständlich kommentiert. Evtl. kann das noch optimiert werden, aber es funktionierte zumindest in kurzen Tests
Detlef "Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
|