Unterordner in Array speichern
Hi!
Ich bin neu hier, und habe eine Frage. Ich hab schon gesucht, aber nichts brauchbares gefunden. Mein Problem ist dies: Ich möchte aus einem Ordner alle Unterordner in einem Array speichern. Also Ordnername1 in arrayname[1]; Ordnernae2 in arrayname[2]... wie mache ich das am besten? Vielen Dank, der delphi-n ;) |
Re: Unterordner in Array speichern
Mit was hast du Probleme, der Ermittlung der Ordner?
|
Re: Unterordner in Array speichern
Hallo und Willkommen in der DP :dp:,
mit dem Gespann FindFirst, FindNext kannst Du durch den Ordner iterieren. Um festzustellen, ob es sich bei dem aktuellen Eintrag um ein Verzeichnis handelt, kannst Du die Attribute von TSearchRec auf faDirectory untersuchen. Als Beispiel für so etwas kannst Du einmal nach FindAllFiles suchen. |
Re: Unterordner in Array speichern
wie macht man das genau? ( sry, ich hatte vergessen zu erwähnen, dass ich weder weiß, wie viele unterordner es gibt, noch wie sie heißen)
|
Re: Unterordner in Array speichern
Dann bietet sich ein dynamischer Array an.
|
Re: Unterordner in Array speichern
Oder eine Ableitung von TStrings (TStringlist z.B.).
|
Re: Unterordner in Array speichern
das Problem liegt ja darin, dass ich nicht weiß, wie die ordner heißen.
Also soll z.B. geschaut werden, ob Ordner xy im verzeichnis z, auch im verzeichnis w zu finden ist. Allerdings kann ich nicht schreiben "schaue nach ob xy in w vorhanden ist", da ich weder weiß, ob xy auch wirklich xy heißt, noch ob es wirklich existiert. Und dann muss das natürlich mit einer (unbekannten) Anzahl an ordnern wiederholt werden. (wieder mit unbekannten namen). |
Re: Unterordner in Array speichern
Deren Namen kannst du ja mit FindFirst/FindNext ermitteln
|
Re: Unterordner in Array speichern
Soll das eine Art Ordnersynchronisation werden?
|
Re: Unterordner in Array speichern
Zitat:
Zitat:
[edit]: ich hab das gefunden: http://www.delphipraxis.net/internal...=392510#392510 wie wende ich das nun auf mein Beispiel an? Irgendwie bakommeich die procedure nicht aufgerufen. Was muss ich da reinschreiben? ich hab schon
Delphi-Quellcode:
aber das will der nicht
procedure TForm1.Button1Click(Sender: TObject);
var OL: array[1..99] of string; begin findallfiles(OL; 'C:\Programme' ; end; habt ihr eine idee? |
Re: Unterordner in Array speichern
Lass das Array mal weg und nimm stattdessen TStrings. Dann ginge das ungefähr so (aus dem Kopf getippt, daher ungetestet):
Delphi-Quellcode:
procedure GetDirectories(DirName: string; const sl: TStrings);
var Rec: TSearchRec; begin sl.Clear; DirName := IncludeTrailingPathDelimiter(DirName); if FindFirst(DirName + '*.*', faDirectory, Rec) = 0 then try repeat if (Rec.Name <> '.') and (Rec.Name <> '..') and ((Rec.Attr and faDirectory) = faDirectory) then sl.Add(Rec.Name); until FindNext(Rec) <> 0; finally SysUtils.FindClose(Rec); end; end; |
Re: Unterordner in Array speichern
also ich hab jetzt das von oben eingegeben, aber bei
sl.Clear; kommt der Fehler "Zugriffsverletzung bei Adresse 00454C9A in Modul 'Projektname.exe'. Lesen von Adresse 00000000" Woran kann das liegen? |
Re: Unterordner in Array speichern
spontan geraten (und das wurde auch hier überall im Forum schon oft gesagt)
du muß die nötige StringList (TStrings/TStringList) vorher auch SELBER erstellen! |
Re: Unterordner in Array speichern
das hab ich oben in der var stehen:
Delphi-Quellcode:
OL: Tstrings;
und unten dann:
Delphi-Quellcode:
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
GetDirectories(Edit1.Text, OL);
|
Re: Unterordner in Array speichern
Und zwar mit
Delphi-Quellcode:
OL := TStringList.Create;
|
Re: Unterordner in Array speichern
da kommt "listenindex überschreitet das max...bla"
mich wundert aber, dass ich gar kein max eingegeben habe?? sry, wenn das vlt. etwas doof klingt, aber wie erstellt man das "maximum"? |
Re: Unterordner in Array speichern
Du kannst das Maximum nicht "erstellen", das richtet sich nach der Anzahl der Einträge. Vermutlich hast Du eine For-Schleife, in der Du bis Liste.Count statt Liste.Count - 1 durchläufst.
|
Re: Unterordner in Array speichern
nein, mein fehler liegt woanders:
der soll wie gesagt die ordner finden. Nun hab ich dem ein Verz. ohne Ordner gegeben. :wall: Da muss nat. voher ne abfrage rein, oder mit try und except. |
Re: Unterordner in Array speichern
Zitat:
|
Re: Unterordner in Array speichern
Zitat:
|
Re: Unterordner in Array speichern
wieso klappt eig.
Delphi-Quellcode:
nicht?
procedure GetDirectories(DirName: string; const sl: TStrings);
var Rec: TSearchRec; begin sl.Clear; DirName := IncludeTrailingPathDelimiter(DirName); if FindFirst(DirName + '*.*', faDirectory, Rec) = 0 then try repeat if (Rec.Name <> '.') and (Rec.Name <> '..') and ((Rec.Attr and faDirectory) = faDirectory) then sl.Add(Rec.Name); until FindNext(Rec) <> 0; except //(statt finally) ShowMessage('Kein Ordner gefunden'); SysUtils.FindClose(Rec); end; end; |
Re: Unterordner in Array speichern
was heißt "wieso klappt eig. nicht"?
WAS GEHT NICHT und WELCHE FEHLERMELDUNGEN werden angezeigt. |
Re: Unterordner in Array speichern
Zitat:
Da dachte ich, könnte man das mit except abfangen; aber es ist alles wie voher (mit finally). |
Re: Unterordner in Array speichern
HI,
also bei mir ist dem FindFirst/FindNext-Gespann eigentlich völlig egal, ob es irgendwelche Unterordner/Dateien gibt. Aber dass es dabei zu Fehlermeldungen kommt, ist mir neu. Und ob du nun Ordner hast oder nicht, weist du erst nachdem du Windows gefragt hast, ob es irgendwelche Ordner für dich parat hat. Das Ergebnis siehst du dann daran, dass am Ende in deiner Liste was drin ist. Bernhard PS: Sollen die Unterordner auch noch rekursiv dargestellt werden? |
Re: Unterordner in Array speichern
Zitat:
aber wenn wir schon dabei sind, wie ermittelt man die länge dieser ListBox, bzw. wie viele einträge sie hat? |
Re: Unterordner in Array speichern
HI,
die Anzahl der Elememte einer Listbox gibts mit ListBox1.Items.Count! Zitat:
Bernhard |
Re: Unterordner in Array speichern
Delphi-Quellcode:
OL ist ein TString und dorthin hab ich voher die Ordner ausgelesen (s.o.)
ListBox1.Items.AddStrings(OL);
|
Re: Unterordner in Array speichern
oups, zu schnell. Kann gelöscht werden
Bernhard |
Re: Unterordner in Array speichern
Dann zeig doch mal Deinen kompletten Code. Dass ein Ordner keine Unterordner enthält kann man btw. ja schlecht als Fehler ansehen, von daher ist das except IMHO sinnbefreit.
|
Re: Unterordner in Array speichern
Rekursiv gesehen stösst man ja immer auf diesen Sachverhalt
|
Re: Unterordner in Array speichern
Jepp, irgendwann ist Schluss.
|
Re: Unterordner in Array speichern
seltsam: wenn ich das auf meinem Rechner daheim ausführe, klappt alles wie geschmiert. :roll:
Der andere war ein Rechner, bei dem fast alles gesperrt und auf nem Server gespeichert ist. Aber egal, hauptsache es klappt :thumb: |
Re: Unterordner in Array speichern
Zitat:
Bernhard PS: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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