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
相关产品推荐
相关产品推荐

