![]() |
Ordnernamen auslesen
Hallo Leute,
Also, ich habe ein Programm, da kann ich auf Buttonklick Einträge in eine ListeBox (Liste) hinzufügen.
Delphi-Quellcode:
Und um mir die Arbeit zu erleichtern, ist mir gerade folgendes Eingefallen:
IF (Edit1.Text <> '') THEN
Liste.AddItem(Edit1.Text + ' (' + ComboBox1.Text + ' | '+ Label1.Caption + ' | '+ Label2.Caption + ')',Sender); ELSE ShowMessage('Bitte geben Sie einen Namen an!'); Ich will einen Pfad (C:\Medien\TestOrdner) durchsuchen. In dem Ordner sind weitere Unterordner. Die Namen der Ordner innerhalb des Pfades soll zur Listbox (Liste) hinzugefügt werden! ODER: Wäre es besser, den Pfad nach bestimmten Dateitypen (*.avi|*.divX etc) zu durchsuchen und deren Namen dann zur ListBox hinzuzufügen? Das hätte dann den Vorteil, das ich die Datei auch gleich von meinem Programm aus starten könnte. 1) Welche Lösung ist besser? 2) Bzw gibts noch ne andere Lösung die ggf noch besser ist? 3) Wie realisier ich das? Und das ganze sollte möglichst einfach & schnell (also das Laden) sein! Danke & gruß |
Re: Ordnernamen auslesen
der code funktioniert.
Delphi-Quellcode:
je nach dem was du nun machen willst, ist dieser code umzuschreiben oder nicht. so wie es in der ersten zeile steht, werden alle ordnernamen eines verzeichnisses in der sList:TStrings gelistet.
//Listet alle Namen von Ordnern in einem Verzeichnis
procedure ListSubDirs(sDir: string; const sList: TStrings); var Rec: TSearchRec; begin sList.BeginUpdate; try sList.Clear; if FindFirst(IncludeTrailingPathDelimiter(sDir) + '*.*', faDirectory or faReadOnly or faHidden or faArchive, Rec) = 0 then begin repeat if (((Rec.Attr and faDirectory) = faDirectory) and (Rec.Name <> '.') and (Rec.Name <> '..')) then sList.Add(Rec.Name); until FindNext(Rec) <> 0; SysUtils.FindClose(Rec); end; finally sList.EndUpdate; end; end; |
Re: Ordnernamen auslesen
Hab ich schonmal gesehen :mrgreen:
|
Re: Ordnernamen auslesen
So, ich hab jetzt folgenden Code um Ordnernamen auszulesen.
Delphi-Quellcode:
Allerdings werden keine Unterordner mit ausgelesen (Das bissel umständlich). Was ich jetzt aber möchte, ist das nur die Ordnernamen ausgelesen werden, in der eine Datei von einem bestimmten Dateityp ist. (BSP: .txt , .doc, .rtf etc)
procedure ListSubDirs(sDir: string; const sList: TStrings);
var Rec: TSearchRec; begin sList.BeginUpdate; try // sList.Clear; if FindFirst(IncludeTrailingPathDelimiter(sDir) + '*.*', faDirectory or faReadOnly or faHidden or faArchive, Rec) = 0 then begin repeat if (((Rec.Attr and faDirectory) = faDirectory) and (Rec.Name <> '.') and (Rec.Name <> '..')) then sList.Add(Rec.Name); until FindNext(Rec) <> 0; SysUtils.FindClose(Rec); end; finally sList.EndUpdate; end; end; EDIT: Die procedure ist in einer DLL und wird zur Laufzeit |
Re: Ordnernamen auslesen
Dann musst du eben in jedem Ordner noch nach den enthaltenen Dateien schauen. Ein Beispiel grundsätzlich dafür siehst du z.B. hier:
![]() |
Re: Ordnernamen auslesen
Meinst Du so etwas?
Delphi-Quellcode:
Ich hoffe, ich habe verständlich kommentiert. Evtl. kann das noch optimiert werden, aber es funktionierte zumindest in kurzen Tests :zwinker:
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; |
Re: Ordnernamen auslesen
Sry, hatte gar nicht gesehen, das jdn geantwortet hat. War nicht als neues Beitrag makiert. :drunken:
Danke, DeddyH genau sowas meinte ich! DANKE! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz