Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
539 views
in Technique[技术] by (71.8m points)

c# - populate treeview from a list of path

I'm trying to populate a treeview from a list of folder path, for example:

C:WINDOWSaddins
C:WINDOWSAppPatch
C:WINDOWSAppPatchMUI
C:WINDOWSAppPatchMUI40C
C:WINDOWSMicrosoft.NETFrameworkv2.0.50727
C:WINDOWSMicrosoft.NETFrameworkv2.0.50727MUI
C:WINDOWSMicrosoft.NETFrameworkv2.0.50727MUI409

with an ouput like this:

├───addins
├───AppPatch
│   └───MUI
│       └───040C
├───Microsoft.NET
│   └───Framework
│       └───v2.0.50727
│           └───MUI
│               └───0409

Notice there's no 'C:WINDOWSMicrosoft.NET' or 'C:WINDOWSMicrosoft.NETFramework' in the list. I've been working on this for almost two days and there's a bunch of bug in my code. Hope I can get help from here.

Thanks.

Eric

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
private void Form1_Load(object sender, EventArgs e)
    {
        var paths = new List<string>
                        {
                            @"C:WINDOWSAppPatchMUI40C",
                            @"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727",
                            @"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727MUI",
                            @"C:WINDOWSaddins",
                            @"C:WINDOWSAppPatch",
                            @"C:WINDOWSAppPatchMUI",
                            @"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727MUI409"
                        };

        treeView1.PathSeparator = @"";

        PopulateTreeView(treeView1, paths, '\');
}


private static void PopulateTreeView(TreeView treeView, IEnumerable<string> paths, char pathSeparator)
    {
        TreeNode lastNode = null;
        string subPathAgg;
        foreach (string path in paths)
        {
            subPathAgg = string.Empty;
            foreach (string subPath in path.Split(pathSeparator))
            {
                subPathAgg += subPath + pathSeparator;
                TreeNode[] nodes = treeView.Nodes.Find(subPathAgg, true);
                if (nodes.Length == 0)
                    if (lastNode == null)
                        lastNode = treeView.Nodes.Add(subPathAgg, subPath);
                    else
                        lastNode = lastNode.Nodes.Add(subPathAgg, subPath);
                else
                    lastNode = nodes[0];
            }
        }
    }

alt text


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...