![]() |
DateiAttribute aus ListBox auslesen
Hallo,
also ich sitzt hier vor folgendem Problem: Ich hab ein Dateiensuchprogramm geschrieben dessen Ergebnisse in eine Listbox geladen werden. jetzt möchte ich die Attribute auslesen, was an sich auch kein Problem ist, wenn man einen festen Pfad angeben kann. da ich jedoch keine festen Pfade angeben kann funktioniert das nicht. Hier als kleiner Hinweis was ich meine der Quellcode der Suchfunktion; Wenn gewünscht kann ich den Source dür die Suchfunktion angeben, glaube aber das ist für das problem nicht nötig :shock: Also thx für alle antworten schon mal.... greg |
Re: DateiAttribute aus ListBox auslesen
Was steht den in der ListBox drin?
|
Re: DateiAttribute aus ListBox auslesen
in der Listbox stehen die Dateinamen mit Endung (z.b. blablabla.txt) (untereinander). Auf Wunsch kann der Pfad (z.B c:\Eigene Dateien\blablabla.txt) mit angegeben werden...
greg |
Re: DateiAttribute aus ListBox auslesen
Dann speicher dir den Pfad doch in irgend einer Variablen! Somit hast du dann wieder der kompletten Dateinamen.
|
Re: DateiAttribute aus ListBox auslesen
also irgentwie klappt das doch noch nicht so ganz... muss nochmal einen schritt zurück gehen: das programm soll alle Unterordner eines vorher vorgegebenen Pfades einer bestimmten Endung anzeigen
Der volgende Quelltext zeigt wie ich es versucht habe, es klappt jedoch nicht (:
Delphi-Quellcode:
Edit1 gibt die Dateiendung an (z.B. TXT)
procedure TForm1.Suche (ext: Str3; pfad: String);
var sr: TSearchRec; r: Integer; begin r:= FindFirst( pfad + '\*.*', faAnyFile,sr); while r = 0 do begin If Copy(sr.Name, 1, 1) <> '.' then begin If (sr.Attr <> 0) and (faDirectory <> 0) then begin Suche(ext, Edit2.Text + '\' + sr.Name); ListBox2.Items.Add(pfad + '\' + sr.Name); end else // If System.Copy (sr.Name, Pos('.' , sr.Name), 4) = '.' + ext then ListBox1.Items.Add(pfad + '\' + sr.Name); end; Application.ProcessMessages; r:= FindNext(sr); end; FindClose(sr); end; Edit2 den Pfad ListBox1 soll alle gefundenen Dateien aufführen, ListBox2 alle durchsuchten/gefundenen ordner ein Klick auf Button1 startet den Suchvorgang:
Delphi-Quellcode:
ich hoffe ihr könnt mir helfen, jab schon alles mögliche versucht :oops:
procedure TForm1.Button1Click(Sender: TObject);
begin Button1.Enabled:= False; ListBox1.Clear; ListBox2.Clear; Suche(Edit1.Text, Edit2.text); Button1.Enabled:= True; end; thx gregor |
Re: DateiAttribute aus ListBox auslesen
Moin Gregor,
ich hab' Deine Methode Suche mal überarbeitet und kommentiert
Delphi-Quellcode:
das mit dem str3 hab' ich nicht verstanden.
procedure TForm1.Suche (ext: string; pfad: String);
var sr: TSearchRec; r: Integer; begin r:= FindFirst( pfad + '\*.*', faAnyFile,sr); if r = 0 then begin // nur wenn FindFirst erfolgreich war, gibt's auch was zu schliessen try // Resourcenschutzblock eingebaut while r = 0 do begin // falsch, da ein Datei-/Verzeichnisname auch mit . beginnen kann // es muss explizit auf . und .. geprüft werden // If Copy(sr.Name, 1, 1) <> '.' then if (sr.Name <> '.') and (sr.Name <> '..') then begin // gefundenes Attribut ausmaskieren und mit gewünschtem vergleichen if (sr.Attr and faDirectory) = faDirectory then // If (sr.Attr <> 0) and (faDirectory <> 0) then begin Suche(ext, Edit2.Text + '\' + sr.Name); ListBox2.Items.Add(pfad + '\' + sr.Name); end else if AnsiUpperCase(ExtractFileExt(sr.Name)) = '.'+AnsiUpperCase(ext) then // If System.Copy (sr.Name, Pos('.' , sr.Name), 4) = '.' + ext then ListBox1.Items.Add(pfad + '\' + sr.Name); end; Application.ProcessMessages; r:= FindNext(sr); end; finally FindClose(sr); end; end; end; Extensions können beliebig lang sein. |
Re: DateiAttribute aus ListBox auslesen
ok danke für die antwort hab's ausprobiert funtioniert bis jetzt ganz gut :lol:
mit dem Str3 hab ich halt gemacht, weil die Dateiendungen nicht mehr als 3 Ziffern haben dürfen (bzw. vom benutzer angegeben werden dürfen). Wenn ich jetzt dur den Sngegebenen Ordner durchsuchen lassen will (also ohne Unterordner) kann ich da die gleiche Procedur nehmen?? oder ist es sinnfoller noch eine zweite zu deklarieren?? Stell mir das ganze so vor das der User mit Hilfe einer Checkbox zwischen "Mit Unterordner" oder "ohne Unterordner" wählen kann. cu gregor |
Re: DateiAttribute aus ListBox auslesen
Moin Gregor,
dann bau in die Parameterliste noch ein Flag ein, dass die Unterscheidung ermöglicht. In der Routine musst Du dann nur noch das Flag abfragen, und ggf. bei auftreten eines Verzeichnisses dieses nicht weiter beachten. |
Re: DateiAttribute aus ListBox auslesen
danke für den Tipp aber nen Flag will ich nicht verwenden....eine einfache Checkbox find ich einfacher...
ich hab jetzt eine zweite procedure deklariert (fast die gleiche, die Christian Seehase mir modifiziert hat) funtioniert aber nicht PC hängt sich immer auf (muss irgentwo eine Entlosschleife sein...) könnt ihr mir nochmal helfen was genau ich ändern muss vielen Dank greg |
Re: DateiAttribute aus ListBox auslesen
Ganz einfach. Wenn die CheckBox markiert / das Flag entsprechend gesetzt ist, darf man nicht nach Ordnern suchen (<> faDirectory).
Ne einfache If Abfrage sollte wohl jeder hinbekommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 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