You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Winform中TreeView加载文件夹出现重复目录的解决方法

修复C# WinForm TreeView中文件夹重复显示的问题

问题根源

你代码中出现文件夹重复的核心原因是重复创建了同一目录的节点:

  • 在WindowExplorer_Load方法里,你手动创建了Laravel节点并添加到“我的电脑”节点下。
  • 紧接着调用LoadFile(dNode, "D:\\Laravel")时,LoadFile方法检测到路径是目录,又创建了一个同名的Laravel节点并添加到之前的dNode下,最终形成「我的电脑 → Laravel → Laravel」的嵌套结构,视觉上就出现了两次。

修复方案一(推荐):让LoadFile直接创建根目录节点

修改WindowExplorer_Load方法,不再手动创建根节点,直接将“我的电脑”节点作为父节点传入LoadFile,由LoadFile完成根目录节点的创建和子项加载:

private void WindowExplorer_Load(object sender, EventArgs e)
{
    string path = "D:\\Laravel";
    // 直接使用"我的电脑"节点作为父节点
    LoadFile(fileView.Nodes[0], path);
}

原LoadFile方法无需修改,这样LoadFile会自动创建Laravel节点并添加到“我的电脑”下,再递归加载所有子目录和文件,结构正确无重复。

修复方案二:修改LoadFile逻辑,跳过当前目录节点创建

如果你需要保留手动创建根节点的逻辑,可以修改LoadFile方法,让它仅加载指定路径的子项,不再创建当前路径的节点:

public void LoadFile(TreeNode parent, string path)
{
    if (Directory.Exists(path))
    {
        // 移除当前目录节点的创建代码,直接遍历子项
        string[] subDir = Directory.GetDirectories(path);
        string[] subFile = Directory.GetFiles(path);
        string[] allSubItem = subDir.Concat(subFile).ToArray();
        foreach (string subItem in allSubItem)
        {
            LoadFile(parent, subItem);
        }
    }
    if (File.Exists(path))
    {
        string fileName = new FileInfo(path).Name;
        TreeNode fileNode = new TreeNode(fileName);
        parent.Nodes.Add(fileNode);
    }
}

此时WindowExplorer_Load可以保留原代码,LoadFile会将Laravel的所有子项直接添加到你手动创建的dNode下,不会重复生成目录节点。


内容的提问来源于stack exchange,提问作者Phú Huỳnh Gia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:45:33