Namen von vorhandenen Pfaden auslesen
Hallo Delphi-PRAXIS,
ich möchte die Namen aller vorhandenen Dateien in verschiedenen Unterpfaden eines Verzeichnisses auslesen und sie in einer Auswahlliste, z.B. ListBox anzeigen. Dabei soll nur das Ende, also der Dateiname angezeigt werden. (Beim Auswählen muss aber wieder der komplette Pfad zur Verfügung stehen.) Das ganze soll etwa so aussehen:
Code:
Wie könnte man das realisieren?
Gespeicherte Dateien (Ordner in dem gesucht werden soll)
- Geburtstag (Ordner) - Geburtstag_2009.xxx (Datei) - Geburtstag_2010.xxx (Datei) - Geburtstag_2011.xxx (Datei) - Schulferien(Ordner) - Schulferien_2009.xxx (Datei) - Schulferien_2010.xxx (Datei) - Schulferien_2011.xxx (Datei) ListBox o.a.: Geburtstag_2009 Geburtstag_2010 Geburtstag_2011 Schulferien_2009 Schulferien_2010 Schulferien_2011 Danke für eure Hilfe. |
AW: Namen von vorhandenen Pfaden auslesen
Entweder du nimmst ein Array zu Hilfe, in dem dann die Pfade drin stehen (passend zu den Einträgen in der ListBox) oder du nimmst ein Listview/Treeview. Da hat jeder Eintrag ein Data-Feld. Da kann man den Pfad auch rein schreiben.
Bernhard |
AW: Namen von vorhandenen Pfaden auslesen
Du meinst also, die Dateinamen, Pfade beim Anlegen der Datei in dem Array einzutragen?
Aber mein Problem ist ja, rückschließend auf die vorhandenen Pfade die ListBox (ListeView...) zu füllen... |
AW: Namen von vorhandenen Pfaden auslesen
Wie schon erwähnt, gibt es dafür das Data-Feld bei jedem Item.
Entweder du füllst eine Liste/Array parallel zur ListBox und speicherst am gleichen Index, wo etwas in der ListBox steht auch im Array, dann kannst du über den Index des Items auf das Array zugreifen. Oder man füllt die ListBox/TreeView, speichert dann den kompletten Namen in einer Liste/Array und legt den Index vom Array in .Data des Items. Oder man speichert direkt den vollen Namen als cast in .Data ab. Oder man speichert den vollen Namen in einem Datenobjekt, welcher in .Data verlinkt wird. Oder man nimmt statt des Daten-Objekts einen Record. Oder man trennt seine Daten von der GUI, legt eine Liste an, füllt dann über diese Liste die ListBox/TreeView und speichert in .Data die Rückreferenzen auf die Werte in der Liste. |
AW: Namen von vorhandenen Pfaden auslesen
Okay gut, das ist jetzt klar.
Aber wie kann ich herausfinden, welche Dateien in dem Ordner X existieren? |
AW: Namen von vorhandenen Pfaden auslesen
Zitat:
Oder man nimmt gleich die SuFu/Forensuche: Dateien auflisten, Dateien suchen usw. PS: FindFirst Oder meinst du innerhalb der ListBox? > Alle untergeordneten Items durchgehn > oder man implementiert in seiner externen Datenhaltungsklasse eine Methode, welcher direkt aus ihren Daten sowas auflistet. |
AW: Namen von vorhandenen Pfaden auslesen
Zitat:
Die ListBox zu füllen ist eher Nebensache. Das wichtige ist ohne zu wissen ob oder welche Dateien in einem Ordner vorhanden sind, deren existenz und Namen (Pfad) herauszufinden. Danke, ich schau mal bei deinen aufgelisteten Sucheinträgen nach. |
AW: Namen von vorhandenen Pfaden auslesen
Speziell für Dateien, im Dateisystem > FileExists
|
AW: Namen von vorhandenen Pfaden auslesen
Ja, FileExists ist bekannt... nur ist das nur sinnvoll, wenn man weiß wie die Datei heißt, die überprüft werden soll.
|
AW: Namen von vorhandenen Pfaden auslesen
Vieleicht suchst du ja sowas (der erte Aufruf dauert, wenn Du Windows als Such-Ordner lässt...)
Wie Du die ermittelten Dateien (statt im Memo zu listen) auswertest, sollte klar sein.
Delphi-Quellcode:
procedure ListDirectory(APath, AFilter : String; AStrings : TStrings);
var s : String; sr : TSearchRec; begin s := IncludeTrailingPathDelimiter(APath); try if FindFirst(s + AFilter, faAnyFile, sr) = 0 then begin repeat if (sr.Name <> '.') and (sr.Name <> '..') then // Korrektur durch DeddyH begin AStrings.Add(s + sr.Name); if (sr.Attr and faDirectory) = faDirectory then ListDirectory(s + sr.Name, AFilter, AStrings); end; until FindNext(sr) <> 0; end; finally FindClose(sr); end; end; procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.BeginUpdate; ListDirectory('C:\Windows', '*.*', Memo1.Lines); Memo1.Lines.EndUpdate; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz