从列表重建树视图<DirectoryInfo>

Reconstruct Tree view from List<DirectoryInfo>

我有一个函数 GetDirectories(),它 return 为我提供了目录信息列表:现在我需要根据它的父级

从中重建一个树视图

这是我的函数 Getdirectories 其中 return List:

public List<DirectoryInfo> GetDirectories() 
    {
        DirectoryInfo di = new DirectoryInfo("D:\python_code");
        folders.Clear();
        FullDirList(di, "*");
        return folders;
    }
 static List<DirectoryInfo> folders = new List<DirectoryInfo>(); // List that hold direcotries that cannot be accessed
 static void GetFullDirList(DirectoryInfo dir, string searchPattern)
    {
        try
        {
            foreach (FileInfo f in dir.GetFiles(searchPattern))
            {
                files.Add(f);
            }
        }
        catch
        {
        }

        foreach (DirectoryInfo d in dir.GetDirectories())
        {
            folders.Add(d);
            FullDirList(d, searchPattern);
        }

    }

我需要从 List 构造类似这样的东西,它包含所有 DirectoryInfo 元素,即它还包含其父信息。

到目前为止,我正在尝试获取其父级相同的元素并将其填充到树视图并递归执行: 但是我无法获得通过 .

编写的递归函数

我知道他们有其他更简单的方法来做同样的事情,但这是我正在尝试绘制的一幅大图的招募。 任何帮助将不胜感激。

假设您有 WinForms 树视图,您可以使用 Find method on the Nodes 集合的关键参数来构建您的层次结构。你不需要递归。这是添加方法:

    void Add(DirectoryInfo di)
    {
        if (di.Parent != null )
        {
            // find our parent node
            var node = treeView1.Nodes.Find(di.Parent.FullName,true);
            if (node.Length == 0)
            {
                // not found, add it as root
                // FullName becomes the key
                treeView1.Nodes.Add(di.FullName, di.Name);
            }
            else
            {
                // not sure what is going on if node.Length > 1
                // anyway, add it to the first node, to be our parent
                node[0].Nodes.Add(di.FullName, di.Name);
            }
        }
        else
        {
            treeView1.Nodes.Add(di.FullName, di.Name);
        }
    } 

一个简单的迭代器将驱动这个方法:

        var list = GetDirectories();
        foreach(var di in list)
        {
            Add(di);
        }