![]() |
TShellTreeView mit Ordnergrößen
Ich würde gerne in ein ShellTreeView zu jedem Ordner die Ordnergöße als Node.Data dazuspeichern und komme dabei nicht weiter
Code:
geht das überhaupt so? (rekursiv denken war noch nie meine Stärke)
function TForm1.getNodeSize(Node: TTreeNode): Int64;
begin if Node.HasChildren then begin Size := Size + getNodeSize(); //von allen Child-Nodes??? end else begin Node.Data := DirSize(Node.Text); //soll später die Größe des Ordners auf unterster Ebene liefern Result := Node.Data; end; end; Wie krieg ich raus was die Childs sind? |
Re: TShellTreeView mit Ordnergrößen
Ok Ich bin ein Stück weiter gekommen aber es hakt immer noch
Delphi-Quellcode:
Das liefert schon ganz gute Ergebnisse nur muss ich hierzu erst alle Einträge ausklappen (FullExpand) und außerdem werden versteckte Ordner nicht berücksichtigt. Wenn ich die versteckten Dateien im TreeView anzeigen lasse stürzt das Programm bei der Berechnung ab und bleibt außerdem an so Sachen wie fehlenden Netzwerkverknüpfungen hängen. Irgendwelche Ideen woran das liegen könnte bzw was man dagegen tun könnte??
function TForm1.getNodeSize(Node: TTreeNode): Int64;
var TempNode: TTreeNode; Path: String; OldIndex, i: Integer; begin Result := 0; if Node.HasChildren then begin TempNode := Node.GetFirstChild; repeat Inc(Result, getNodeSize(TempNode)); TempNode := Node.GetNextChild(TempNode); until TempNode = nil; end; OldIndex := Node.AbsoluteIndex; if OldIndex = 0 then Path := '' else Path := Node.Text; for i := 0 to Node.Level-2 do begin Path := TreeView.Items[OldIndex].Parent.Text + '\' + Path; OldIndex := TreeView.Items[OldIndex].Parent.AbsoluteIndex; end; Path := TreeView.Root + Path + '\'; Inc(Result, DirSize(Path)); Sizes[Node.AbsoluteIndex] := Result; Node.Data := @Sizes[Node.AbsoluteIndex]; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 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