![]() |
Ordnernamen in Listbox laden
Hallo,
wie kann ich alle Ordner die sich im Programmordener befinden auslesen und ihre Namen in einer Listbox anzeigen? Danke im Vorraus |
Re: Ordnernamen in Listbox laden
Mit FindFirst() und FindNext() durch das Verzeichnis iterieren, auf das faDirectory-Attribut prüfen und Namen eintragen.
|
Re: Ordnernamen in Listbox laden
Hallo
Das geht z.B mit der ![]() Flexibler bist du jedoch mit ![]() ![]()
Delphi-Quellcode:
procedure ListDirectories(LB: TListBox; Path: PChar);
var i: Integer; begin with LB do begin Perform(LB_DIR, DDL_DIRECTORY, Integer(Path)); for i := Pred(Items.Count) downto 0 do if Items[i][1] <> '[' then Items.Delete(i); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ListDirectories(ListBox1,'C:\*.*'); end; |
Re: Ordnernamen in Listbox laden
Danke für den Code, es geht.
Leider werden aber die Namen mit [ ] umrandet und es befindet sich auch ein [...] in der ListBox. Kann man das irgendwie ändern? Danke |
Re: Ordnernamen in Listbox laden
Edit: i sollte vom Typ Integer sein und nicht Word. Probier's nochmals.
|
Re: Ordnernamen in Listbox laden
Die Namen werden immer noch mit [ ] umrandet und es befindet sich auch ein [..] in der ListBox.
Weisst du was ich noch tun könnte? |
Re: Ordnernamen in Listbox laden
In dem Code findest Du eine For-Schleife.
In dieser wird jeder Eintrag gelöscht, der nicht mit '[' beginnt. In dieser Schleife kannst Du nun einbauen, dass die Zeichen '[' und ']' ausgeschnitten werden. Dein Freunde hierfür sind ![]() ![]() Auch kannst Du den Eintrag [..] darin ebenfalls löschen. Gruß |
Re: Ordnernamen in Listbox laden
Es tut mir leid, ich habe nie auf dieser Ebene mit Delphi gearbeitet. Könntest Du mir nicht einen kleinen Beispielcode schreiben?
Wäre dir sehr dankbar. |
Re: Ordnernamen in Listbox laden
Oder halt so
Delphi-Quellcode:
Am besten du schaust dir mal die Delphihilfe an. Einfach Copy eingeben und dann schauen was es dir anzeigt. Da siehst du auch direkt, welche Parameter die Funktion erwartet etc.
procedure TForm1.Button1Click(Sender: TObject);
begin ListBox1.Items.Assign(DirectoryListing('C:/*')); end; function TForm1.DirectoryListing(const PATH: string): TStrings; var S : TSearchRec; begin Result := TStringlist.Create; if FindFirst(PATH, faDirectory, S) = 0 then begin repeat if (S.Attr and faDirectory) = S.Attr then Result.Add(S.Name); until FindNext(S) <> 0; FindClose(S); end; if Result.Count = 0 then Result.Add(format('%s enthält keine Ordner', [path])); end; Lg |
Re: Ordnernamen in Listbox laden
Danke, aber da werden jetzt noch zuerst . und .. angezeigt. Weisst Du wie man die wegmacht?
|
Re: Ordnernamen in Listbox laden
Delphi-Quellcode:
// PS: dass die Funktion eine Stringliste erzeugt, finde ich nicht besonders glücklich, mach' doch 'ne Prozedur draus und übergebe dieser die Listbox zum direkten Befüllen
if (S.Name<>'.') and (S.Name<>'..') then Result.Add(S.Name)
|
Re: Ordnernamen in Listbox laden
Und das geht wie? ;).
|
Re: Ordnernamen in Listbox laden
Delphi-Quellcode:
// nur aus dem Kopf getippt
procedure TForm1.Button1Click(Sender: TObject);
begin DirectoryListing('C:/*',Listbox1.Items); end; procedure TForm1.DirectoryListing(const PATH:String;SL:TStrings); var S : TSearchRec; begin if FindFirst(PATH, faDirectory, S) = 0 then begin repeat if (S.Attr and faDirectory) = S.Attr then if (S.Name<>'.') and (S.Name<>'..') then SL.Add(S.Name) until FindNext(S) <> 0; FindClose(S); end; if Result.Count = 0 then SL.Add(format('%s enthält keine Ordner', [path])); end; |
Re: Ordnernamen in Listbox laden
Zitat:
Delphi-Quellcode:
procedure ListDirectory(Strings: TStrings; const Path: string);
var S: TSearchRec; begin if FindFirst(Path, faDirectory, S) = 0 then begin repeat if ((S.Attr and faDirectory) = faDirectory) and (s.Name <> '.') and (s.Name <> '..') then Strings.Add(S.Name); until FindNext(S) <> 0; FindClose(S); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ListDirectory(ListBox1.Items, 'C:\*.*'); end; |
Re: Ordnernamen in Listbox laden
hihihi, schneller :lol:
|
Re: Ordnernamen in Listbox laden
Ja, weil ich die Stringliste dann nicht mehr freigeben kann. Aber Delphi dürfte den Speicher dann trotzdem wieder freigeben, was?
Ansonsten mach doch einfach so:
Delphi-Quellcode:
Ich liebe Funktionen ;)
function TForm1.DirectoryListing(const PATH: string;
var L: TListBox): Integer; var S : TSearchRec; begin Result := 0; if FindFirst(PATH, faDirectory, S) = 0 then begin repeat if ((S.Attr and faDirectory) = S.Attr) and (S.Name <> '.') and (S.Name <> '..') then begin L.Items.Add(S.Name); INC(Result); end; until FindNext(S) <> 0; FindClose(S); end; if Result = 0 then L.Items.Add(format('%s enthält keine Ordner', [PATH])); end; |
Re: Ordnernamen in Listbox laden
Ja, geht auch, aber TStrings sind universeller
:wink: |
Re: Ordnernamen in Listbox laden
Zitat:
Zitat:
|
Re: Ordnernamen in Listbox laden
Schon richtig!
Das ist nur übernommen, nicht von mir. Hätte korrigiert werden müssen! Sorry! :cry: |
Re: Ordnernamen in Listbox laden
Danke euch ;). Und warum ist das besser? ;).
|
Re: Ordnernamen in Listbox laden
WAS?
|
Re: Ordnernamen in Listbox laden
Oh sry, ihr habt ja noch was geschrieben ;). Warum procedure besser als function ist.
|
Re: Ordnernamen in Listbox laden
Weil du dir unnötigerweise Problem mit dem Freigeben der in der Funktion erzeugten Liste einhandelst. Du kannst natürlich auch eine Funktion formulieren, die wie die Prozedur direkt an die Listbox übergibt und als Funktionsergebnis den Erfolg/Misserfolg des DirScans meldet.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 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