You need to enable JavaScript to run this app. C# 递归遍历目录如何将生成的TreeNode挂载到TreeView父节点
优惠活动
大模型
产品
解决方案
定价
更多

C# 递归遍历目录如何将生成的TreeNode挂载到TreeView父节点

递归填充TreeView的核心实现

节点挂载逻辑

你需要补的核心代码非常简单:每个TreeNode对象自带Nodes集合,专门用来存储当前节点下的所有子节点,在创建完目录/文件对应的节点实例后,调用传入的parent对象的Nodes.Add()方法把新节点传入,即可完成子节点和父节点的层级绑定。

补全后的完整代码

private void RecursiveAddToTree(string path, TreeNode parent)
{
    var directories = Directory.GetDirectories(path);
    var files = Directory.GetFiles(path);
    foreach (var directory in directories)
    {
        var node = new TreeNode(getItemOrDirectoryName(directory)) 
        {
            ImageIndex = 0, 
            SelectedImageIndex = 1
        };
        // 补全:将目录节点挂载到传入的父节点下
        parent.Nodes.Add(node);
        // 递归遍历当前目录的下级内容,以新建的目录节点作为下一层级的父节点
        RecursiveAddToTree(directory, node);
    }
    
    foreach (var file in files)
    {
        var node = new TreeNode(getItemOrDirectoryName(file)) 
        {
            ImageIndex = 0, 
            SelectedImageIndex = 0
        };
        // 补全:将文件节点挂载到传入的父节点下
        parent.Nodes.Add(node);
    }
}

首次调用参考

这个递归方法需要绑定一个初始的根节点作为入口,首次调用可以参考下面的写法:

// 准备起始遍历路径
string startPath = @"D:\需要遍历的目标文件夹";
// 创建根节点
TreeNode rootNode = new TreeNode(getItemOrDirectoryName(startPath));
// 将根节点添加到TreeView控件的顶级节点集合
yourTreeViewControl.Nodes.Add(rootNode);
// 启动递归遍历
RecursiveAddToTree(startPath, rootNode);

实际使用注意点

  • 遍历系统保护目录时,建议增加UnauthorizedAccessException异常捕获,遇到无权限访问的路径直接跳过,避免程序异常崩溃
  • 确保getItemOrDirectoryName方法提取路径的最后一段作为节点显示文本,不要直接把完整全路径作为节点名称展示
  • 建议将节点挂载逻辑放在递归调用之前,先完成当前层级的节点绑定,再遍历子内容,避免调试时出现层级错乱

内容的提问来源于stack exchange,提问作者salt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 13:06:03