通过TreeView递归并创建文件夹

时间:2018-11-12 16:07:13

标签: vb.net recursion treeview

我想构建一个通过树视图递归的功能,并在硬盘驱动器上创建每个文件夹。到目前为止,代码运行良好。一旦到达节点的末端,它就会跳得更深一层。但是,我在这里缺少的是一行代码,可以跳回到上一级文件夹以继续创建其他文件夹。 这是我到目前为止的内容:

    Private Sub RecurseNodes(ByVal col As TreeNodeCollection)
    For Each tn As TreeNode In col
        Console.WriteLine(drive_letter & treefix & tn.Text)
        If tn.Nodes.Count > 0 Then
            treefix = treefix & tn.Text & "\"
            RecurseNodes(tn.Nodes)
        End If
    Next tn
End Sub

这是我的输出结果:

E:\Auftraggeber Projektname 00000
E:\Auftraggeber Projektname 00000\Export
E:\Auftraggeber Projektname 00000\Material
E:\Auftraggeber Projektname 00000\Material\Original
E:\Auftraggeber Projektname 00000\Material\Transcodiert
E:\Auftraggeber Projektname 00000\Material\Footage
E:\Auftraggeber Projektname 00000\Material\GFX
E:\Auftraggeber Projektname 00000\Material\SFX
E:\Auftraggeber Projektname 00000\Material\Sprecher
E:\Auftraggeber Projektname 00000\Material\Projekt
E:\Auftraggeber Projektname 00000\Material\Musik

这是树的实际外观: TreeView

因此,一旦代码到达 E:\ Auftraggeber项目名称00000 \ Material \ Footage ,它应返回上一级文件夹以继续处理。

这可能只是一行或两行代码,但我无法弄清楚。 感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在这种情况下,简单的解决方案是先存储treefix变量的旧值,然后再进行更改,然后在内部RecurseNodes()调用退出后恢复为原来的值:

If tn.Nodes.Count > 0 Then
    Dim currentPath As String = treefix
    treefix = treefix & tn.Text & "\"

    RecurseNodes(tn.Nodes)

    treefix = currentPath
End If

尽管要避免使用类级别的变量,但更可持续的解决方案是仅将当前路径传递给您的方法。另外,在一般情况下使用路径时,请首选Path.Combine()

Private Sub RecurseNodes(ByVal col As TreeNodeCollection, ByVal currentDirectory As String)
    For Each tn As TreeNode In col
        Dim currentPath As String = Path.Combine(currentDirectory, tn.Text)
        Console.WriteLine(currentPath)

        If tn.Nodes.Count > 0 Then
            RecurseNodes(tn.Nodes, currentPath)
        End If
    Next tn
End Sub

用法示例:

RecurseNodes(TreeView1.Nodes, "E:\Auftraggeber Projektname 00000")