![]() |
Ordner im Windows Verzeichnis suchen
Hi
Ich möchte in einem TreeView den Pfad (z.B.: C:\Windows\Anwendungsdaten\Adobe\) anzeigen, den ich zuvor gespeichert habe. Dazu habe ich folgenden Code geschrieben:
Code:
Warum funktioniert das bei manchen Ordnern im Windows Verzeichnis nicht, der Ordner ist definitiv da?
z:=0;
While AnsiPos('\',pfad)<>0 do begin i:=AnsiPos('\',pfad); s:=copy(pfad,1,i-1); For i:=z to TreeView1.Items.Count-1 do If TreeView1.Items.Item[i].Text=s then begin TreeView1.Items.Item[i].Expand(False); z:=i+1; Break; end; pfad:=copy(pfad,Length(s)+2,Length(pfad)-Length(s)-1); end; Gruß |
Ich weiss zwar nicht, wie Du die Verzeichnisse ausgelesen hast, aber kann es sein, dass es durch System- und versteckte Dateien/Verzeichnisse diese Probleme gibt?
|
Aber das TreeView enthält exakt die gleichen Ordner, wie vorher. Ich find da einfach keine Lösung.
|
Moin Tpercon,
wie liest Du denn die Ornderstruktur aus? |
Ich lese ganz normal mit FindFirst,FindNext,... nur die Ordner ein. Daran kann es aber auch nicht liegen.
Der Index wird doch von oben nach unten durch gezählt oder? Damit müßte es doch stimmen, dass ein Unterordner einen höheren Index hat, als der darüber und mein Code somit richtig sein?! |
Poste mal die Zeile(n) mit dem FindFirst!
|
Hi
Hier die paar Zeilen, die in Frage kommen. Hiermit lese ich die obersten Ordner nach den Laufwerken ein:
Code:
Dann der Code vom TreeViewExpanding:
procedure TForm1.showdir(Node:TTreeNode;s:string);
var datei: TSearchRec; begin If FindFirst(s, faDirectory, datei) = 0 then begin try repeat If (datei.Name = '.') or (datei.Name = '..') or (datei.Attr and fadirectory = 0) then Continue; TreeView1.Items.AddChild(Node, datei.Name); until Findnext(datei) <> 0; finally FindClose(datei); end; end; end;
Code:
Die Funktion dir liest dabei nur weitere Ordner ein Level tiefer aus. Im Prinzip wie ShowDir.
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TreeNode; var AllowExpansion: Boolean);
begin dir(Node, true); Node.AlphaSort; end;
Code:
by Daniel B; Code-Form.
procedure TForm1.dir(Node:TTreeNode; Ordner:boolean);
var s, pfad: string; i: integer; N: TTreeNode; datei: TSearchRec; ... begin if ordner then begin TreeView1.Items.BeginUpdate; Node.DeleteChildren; end else begin ... end; N := Node; s := ''; while N <> nil do begin s := N.Text + #92 + s; N := N.Parent; end; pfad:=s; s := pfad + '*.*'; if FindFirst(s,faDirectory,datei) = 0 then begin try repeat if (datei.Name='.')or(datei.Name='..') then Continue; if (datei.Attr and fadirectory > 0) and (ordner = true) then begin N := TreeView1.Items.AddChild(Node, datei.Name); showdir(N, pfad + datei.Name + '\*.*'); end; if (datei.Attr and fadirectory = 0) and (ordner = false) then begin ... end; until Findnext(datei)<>0; finally FindClose(datei); end; end; if ordner then TreeView1.Items.EndUpdate else begin ... end; end; |
Hi
Hat keiner ne Idee? @ Daniel B: Hast wohl Langeweile, meine Formatierung find ich auch schön. Gruß |
OT:
Zitat:
mit langeweile hat das nichts zutun. Bisher war es immer so das man immer 2Spalten einrückt. Es soll nur einigermassen einheitlich aussehen. Ich will jetzt kein Mod angreifen, aber die anderen kümmern sich nciht besonders drum, Postings zu Formatieren. Deswegen habe ich da noch, wie soll ich sagen, freies Spiel. Keiner hat bis jetzt drüber gemeckert. Wenn andere nicht Fomatieren, an wenn soll ich mich denn richten? Deswegen mache ich es nach meinem Befinden. Das ich eigentlich nciht schlecht finde. Das kann man aber natürlich die User entscheiden lassen. Ob 1 oder 2 Spalten einrücken. Ich mach mal ein Thread auf. Du kannst ja abstimmen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 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