Visual Basic 6.0

Ich habe die Aufgabe bekommen ein Visual Basic programm zu schreiben dass :

  1. Treeview von Ordnern & Laufwerken
  2. Ordnergrösse
  3. per checkboxes aktivierte ordner zusammenzählen

1 + 2 —> kein problem
3 --> ich weiss nich wie ich einen code schreibe der den treeview von oben bis unten nach aktivierten checkboxes durchsucht, diese dann mit dem kompletten pfad des ordners zusammenrechnet…

mfg
Stefan

Hi,

also im prinzip ist das einfach. Das Treeview besteht ja aus node-objekten.
nun hat ein einzelner node keine checkbox-eigenschaft oder so ähnlich.
man kann aber die picture- und die tag-eigenschaft dazu benutzen eine auswahl zu ermöglichen.

zum durchsuchen benutze man die nodes-auflistung.

dim n as node
for each n in tv.nodes
if n.tag=1 then

end if
next

das mit dem kompletten pfad verstehe ich nicht ganz, aber ein node-objekt hat eine full-path-eigenschaft die die Keys ausgehend von der Wurzel enthält.

alle klarheiten beseitigt? gut.

mfg, holli

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Stefan,
so ratterst Du den Treeview durch:

Dim Node As MSComctlLib.Node
Dim l As Long
For l = 1 To Treeview1.Nodes.Count
Set Node = Treeview1.Nodes.Item(l)
If Node.Checked Then
'Dein Summier-Coding z.B.:
'sum = sum + GetSum(Node.key)
End If
Next l

Ich persönlich würde immer den ganzen Pfad im Key speichern
Node.key =
dann kannst Du ganz leicht von den einzelnen Pfaden die Datei-Größe summieren!!
TIP: Der VB-Befehl FileLen() wird Dir von nutzen sein!!

greets from MichL (Vienna)

ich bräuchte doch nochmal hilfe
mein Code zum anzeigen der Grösse des Ordners sieht in etwa s aus :
Function ShowFolderSize(filespec)

Set fso=CreateObject(„Scripting.Filesystemobject“)
On Error Resume Next
Set f = fso.GetFolder(tvw1.SelectedItem.FullPath)

n Error Resume Next
ordnerpfad = tvw1.SelectedItem.FullPath

ordnergroesse = Format(f.Size / 1024 / 1024, „0.000“)

hoffe das kann man in etwa erkennen
meine frage nun : wie baue ich das in den code von dir ein so dass er wirklich alle markierten ordner zusammenzählt ?
irgendwie krieg ich das nich anz gebacken =(

danke schonmal im vorraus

Dim Node As MSComctlLib.Node
Dim l As Long
For l = 1 To Treeview1.Nodes.Count
Set Node = Treeview1.Nodes.Item(l)
If Node.Checked Then
'Dein Summier-Coding z.B.:
'sum = sum + GetSum(Node.key)
End If
Next l

Hi Stefan,
folgende Funktion gibt Dir die Größe eines Ordner zurück. (OHNE Unterverzeichnisse!!!)

Aufgerufen wird sie so:
lngSize = GetFolderSize(„c:\winnt\system32“, „*.*“)


Public Function GetFolderSize(ByVal strPath As String, ByVal strWildCard As String) As Long
Dim objFso As Scripting.FileSystemObject
Dim objFolder As Scripting.Folder
Dim objFiles As Scripting.Files
Dim objFile As Scripting.File
Dim lngSize As Long

Set objFso = New FileSystemObject

Set objFolder = objFso.GetFolder(strPath)
Set objFiles = objFolder.Files

If strWildCard = „“ Then strWildCard = „*“
strWildCard = UCase$(strWildCard)
For Each objFile In objFiles
If UCase$(objFile.Name) Like strWildCard Then
lngSize = lngSize + objFile.Size
End If
Next

Set objFile = Nothing
Set objFiles = Nothing
Set objFolder = Nothing
Set objFso = Nothing

GetFolderSize = lngSize

End Function

Jetzt brauchst Du nur mehr den TreeView durchrattern und das sieht dann so aus: (unter der Annahme das im „Node.key“ der ganze Pfad steht!!! - der ganze Pfad ist ja eindeutig-einmalig und kann daher auch als „Key“ verwendet werden!!!)

Dim Node As MSComctlLib.Node
Dim l As Long
Dim lngSize as long

For l = 1 To Treeview1.Nodes.Count
Set Node = Treeview1.Nodes.Item(l)
If Node.Checked Then
lngSize = lngSize + GetFolderSize(Node.key, „*.*“)
End If
Next l

Debug.Print "Gesamt-Größe: " & lngSize

Schau’s Dir genau an … funktioniert nämlich!!

greets from MichL (Vienna)

yooo :wink:
dankeschön, hat alles wunderbar geklappt
Habs nur etwas umgeschrieben so dass er auch die unterverzeichnise einbezieht etc

Naja, einmal fertig, tut sich ein neues Problem auf :wink:) :

Sobald ich ein Drive anklicke schmiert er ab, ok das er abschmiert hab ich weggbekommen aber schön wärs dennoch noch, wenn er mir die grösse des drives mit zu rechnen könnte…falls es angeklickt is

ich habs mit unzähligen sachen versucht
if node.checked = drv.drivetype then…
naja jedenfalls hab ich es nie ganz hinbekommen…

Und dann…da ich bei mri so ziemlich viele netzlaufwerke habe, müsste er die auch einbeziehen, macht er aber nich *grmpf*
schon die grösse von sonem ding zu berechnen… argl

naja vielen dank nochmal :wink:

Hi,
ganz hab’ ich Dein Problem eigentlich nicht behirnt … das gleiche soll auch mit Laufwerken funktionieren???

wie wäre es mit:

Dim objFSO As Scripting.FileSystemObject
Dim objFolder As Folder

Set objFSO = New Scripting.FileSystemObject
Set objFolder = objFSO.GetFolder(„c:“)
Debug.Print objFolder.Size

Funktioniert … auch mit Netzlaufwerken!!

greets from MichL (Vienna)