Ordnerstruktur als Treeview

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Ordnerstruktur als Treeview

    Ich wette es gibt schon irgend eine Funktion/klasse dazu, aber ich finde keine mit google, und die forensuche hat auch nichts erbracht.

    Ich muss die gesamte Ordner und Dateistruktur eines best. verzeichnisses auslesen.
    Das ganze soll 1. Als TreeView ausgegeben werden, und dann 2. Eine möglichkeit bieten diese zu exportieren in eine textdatei, um sie später woanders wieder in einen tree zu importieren.
    Ich bin zwar auf die Directory Klasse gestoßen, allerdings weiß ich nicht wie ich das dann als Tree element umbaue. Falls es schon ne simple funktion dafür zu finden gibt irgendwo, würde ich diese bevorzugen.


    edit: ich denke es würde schon reichen wenn mir jemans sagen kann wie ich dynamisch Knotenpunkte hinzufüge...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Screeze“ ()

    Dynamisch kannst du so Knoten hinzufügen:

    VB.NET-Quellcode

    1. Dim NewNode as new TreeNode(AngezeigterName)
    2. 'Jetzt kannst du noch Unterpunkte hinzufügen.
    3. NewNode.Add(DeinText)
    4. 'Und jetzt noch dem TreeView hinzufügen.
    5. TreeView.Nodes.Add(NewNode)
    6. 'oder wenn du es an einer ganz bestimmten Stelle haben willst:
    7. TreeView.Nodes(NummerDesNodes)(...).Add(NewNode)


    lg
    Ok danke, damit hab ich schonmal diesen Ansatz hinbekommen:


    VB.NET-Quellcode

    1. Sub ListDirectories(ByVal Path As String)
    2. Try
    3. Dim FolderInfo As New IO.DirectoryInfo(Path)
    4. Dim Folder As IO.DirectoryInfo = Nothing
    5. For Each Folder In FolderInfo.GetDirectories()
    6. ListFolder(Folder.Name)
    7. ListDirectories(Folder.FullName)
    8. Next
    9. Catch ex As System.Exception
    10. End Try
    11. End Sub
    12. Sub ListFolder(ByVal Folder As String)
    13. Dim AddFolder As New TreeNode(Folder)
    14. frmTree.Nodes.Add(AddFolder)
    15. End Sub


    Das gibt allerdings einen Baum der art:

    -Ordner 1
    -Ordner 1.1
    -Ordner 1.2
    -Ordner 2
    -Ordner 2.1
    ect.
    (ordner 1.1 und 1.2 wären in Ordner 1)

    Wie mach ich das am geschicktesten, dass die Ordner als child element der entsprechenden Ordner angezeigt werden. Das ganze hat unbekannt viele Ebenen, also muss es eine komplett dynamische lösung sein.
    [also so sollte es sein:
    -ordner 1
    .....Ordner 1.1
    .....Ordner 1.2
    -Ordner 2
    .....Ordner 2.1
    ect.]
    Ich steh grad aufm schlauch... Hat jemand ne Idee dazu?
    hmm Danke, normalerweiße mach ich das auch, habs auch schon versucht bei mehreren seiten, aber Ich beschäftige mich erst 2 Tage mit vb, und da schaff ichs noch nicht komplett ohne erklärung... Ich versuchs weiter, aber wenn einer vill. kurz zeit für ne erklärung hättw wär super


    edit:

    also ich hab das jetzt mal so abgewandelt:

    VB.NET-Quellcode

    1. Public Sub ShowTree(ByVal Path As String)
    2. Dim nNode As New TreeNode(Path)
    3. frmTree.Nodes.Add(nNode)
    4. Me.FillTreeNode(nNode)
    5. End Sub
    6. Private Sub FillTreeNode(ByVal dNode As TreeNode)
    7. Try
    8. Dim d As New DirectoryInfo(dNode.FullPath)
    9. For Each di As DirectoryInfo In d.GetDirectories
    10. Dim nNode As New TreeNode(di.Name)
    11. dNode.Nodes.Add(nNode)
    12. nNode.Nodes.Add("")
    13. Next
    14. Catch : End Try
    15. End Sub


    Das sammelt jetzt schonmal die Verzeichnisse alle richtig, aber leider noch keine unterverzeichnisse, es wird nur ein leerer unterknoten ausgegeben...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Screeze“ ()

    Wollte mich nicht extra registrieren.

    Aber ich habs grade hinbekommen, es hat nur eine einzige zeile gefehlt:


    VB.NET-Quellcode

    1. Public Sub ShowTree(ByVal Path As String)
    2. Dim nNode As New TreeNode(Path)
    3. frmTree.Nodes.Add(nNode)
    4. Me.FillTreeNode(nNode)
    5. End Sub
    6. Private Sub FillTreeNode(ByVal dNode As TreeNode)
    7. Try
    8. Dim d As New DirectoryInfo(dNode.FullPath)
    9. For Each di As DirectoryInfo In d.GetDirectories
    10. Dim nNode As New TreeNode(di.Name)
    11. dNode.Nodes.Add(nNode)
    12. FillTreeNode(nNode)
    13. Next
    14. Catch : End Try
    15. End Sub


    Jetzt wird schonmal die ordnerstruktur richtig ausgewertet. Jetzt muss ich nurnoch die dateien dazu hinbekommen.
    Danke schonmal
    Falls noch jemand das gleiche vorhaben hat, Ich hab mir das jetzt so gebastelt, es werden alle Ordner (unterordner ect.) in einen baum geladen und sämtliche dateien ebenfalls. Funktioniert bisher gut, nur bei Zugriffsfehlern muss ich noch etwas basteln.

    VB.NET-Quellcode

    1. Public Sub ShowTree(ByVal Path As String)
    2. Dim nNode As New TreeNode(Path)
    3. frmTree.Nodes.Add(nNode)
    4. Me.FillTreeNode(nNode)
    5. End Sub
    6. Private Sub FillTreeNode(ByVal dNode As TreeNode)
    7. Try
    8. Dim d As New DirectoryInfo(dNode.FullPath)
    9. For Each di As DirectoryInfo In d.GetDirectories
    10. Dim nNode As New TreeNode(di.Name)
    11. dNode.Nodes.Add(nNode)
    12. FillTreeNode(nNode)
    13. Next
    14. For Each fi As FileInfo In d.GetFiles
    15. Dim fNode As New TreeNode(fi.Name)
    16. dNode.Nodes.Add(fNode)
    17. Next
    18. Catch : End Try
    19. End Sub

    Ordnerberechtigung auslesen und säubern

    Hallo,

    Habe das selbe gebraucht und ein bisschen Angepasst.
    Nun will ich noch die Ordnerberechtigungen anzeigen lassen, ich will die "Geerbten" und die "Expliziten" auslesen, jedoch habe ich dann das Problem, dass ich doppelte Einträge habe.
    Wie kann ich die Liste dann "Mergen"? besser direkt bei der Prüfung zBsp. ein * als Markierung hinzufügen, jedoch müsste ich den vorherigen selben Eintrag rauslöschen..Deshalb lieber direkt eine passende Methode.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Security.AccessControl
    3. Imports System.Security.Principal
    4. Public Class Form1
    5. Dim c As Integer = 0
    6. Private Sub FillTreeNode(ByVal dNode As TreeNode) 'dNode = Pfad zBsp: C:\Temp\
    7. Dim d As New DirectoryInfo(dNode.FullPath)
    8. For Each di As DirectoryInfo In d.GetDirectories
    9. Dim lstAcc As New List(Of String)
    10. On Error Resume Next
    11. Dim DirSecurity As DirectorySecurity = Directory.GetAccessControl(di.FullName)
    12. For Each ACL As FileSystemAccessRule In DirSecurity.GetAccessRules(True, True, GetType(NTAccount))
    13. Dim Str As String = ACL.IdentityReference.Value
    14. 'If ACL.IsInherited = True.. Wie weiter?
    15. lstAcc.Add(Str.Substring(" " & Str.LastIndexOf("\") + 1))
    16. Next
    17. Dim strAcc As String = String.Join(",", lstAcc)
    18. Dim nNode As New TreeNode(di.Name & strAcc)
    19. dNode.Nodes.Add(nNode)
    20. FillTreeNode(nNode)
    21. lstAcc.Clear()
    22. Next
    23. End Sub
    24. Public Sub ShowTree(ByVal Path As String)
    25. Dim nNode As New TreeNode(Path)
    26. frmTree.Nodes.Add(nNode)
    27. Me.FillTreeNode(nNode)
    28. End Sub
    29. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    30. Dim FolderBrowserDialog1 As New FolderBrowserDialog
    31. With FolderBrowserDialog1
    32. .Description = "Select the directory"
    33. If .ShowDialog = DialogResult.OK Then
    34. ShowTree(.SelectedPath)
    35. End If
    36. End With
    37. 'ShowTree("C:\Temp\")
    38. frmTree.ExpandAll()
    39. End Sub
    40. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „syntax“ ()