0

我希望更改为目录树的添加节点的名称。

 private static TreeNode GetDirectoryNodes(string path)
    {
        var dir = new DirectoryInfo(path);
        var node = new TreeNode(path);
        //node.Nodes.Add("Windows");
        foreach (var directory in dir.GetDirectories())
        {
            node.Nodes.Add(GetDirectoryNodes(path + "\\" +directory.ToString()));
        }


        return node;
    }

这将给出类似的输出

C:\Test1
|
|-C:\Test1\Test1
|  |-C:\Test1\Test1\Test1
|-C:\Test1\Test2

但是我想展示

C:\Test1
|
|-Test1
|  |-Test1
|-Test2

我发现如果我使用

foreach (var directory in dir.GetDirectories())
        {
            node.Nodes.Add(directory.ToString());
        }

我将只给出添加路径名,但不会递归子目录输出将是

 C:\Test1
|
|-Test1
|-Test2

那么如何更改名称

4

3 回答 3

1

线

var node = new TreeNode(path);

是设置每个节点的文本的位置(设置为 的值path)。

将其更改为类似

var node = new TreeNode(path.Substring(path.LastIndexOf('\\') + 1));

更好的是,不要通过字符串执行此操作,而是通过传递DirectoryInfo对象。然后,您可以使用以下Name属性,而不是对目录名称进行字符串解析:

private static TreeNode GetDirectoryNodes(DirectoryInfo dir)
{
    var node = new TreeNode(dir.Name);
    foreach (var childDir in dir.GetDirectories())
    {
        node.Nodes.Add(GetDirectoryNodes(childDir));
    }
    return node;
}
于 2012-10-03T10:25:51.690 回答
1

您可以DirectoryInfo.Name用于节点,它会为您提供没有完整路径的短名称(如果需要,您可以存储FullName在标签中)。像这样:

var node = new TreeNode(dir.Name);
于 2012-10-03T10:27:18.630 回答
0

似乎您想删除最后一个 '\' 之前的所有内容,那么为什么不只使用从最后一个 '\' 的索引到字符串末尾的子字符串函数。

于 2012-10-03T10:22:05.280 回答