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 に答える