使用文件系统目录结构填充TreeView

我在这里是Nodes的新手.. :)我想出了这个算法,但是它只显示父节点的列表..像这样..

a

a.txt

b

c

c

m

n

b

o

p

etc...

我希望下一个节点将被放置在上一个节点内的一个节点中..所以它将像这样出现。

a

a.txt

b

o

p

c

m

n

etc...


我有一些想法,但我可以将其实现为代码.. :)任何帮助。

private void ListDirectory(TreeView treeView, String path)

{

Stack<string> stack = new Stack<string>();

TreeNode DirFilesCollection = new TreeNode();

stack.Push(path);

while (stack.Count > 0)

{

string dir = stack.Pop();

try

{

List<String> parentDir = new List<string>();

parentDir.AddRange(Directory.GetFiles(dir, "*.*"));

parentDir.AddRange(Directory.GetDirectories(dir));

DirectoryInfo d = new DirectoryInfo(dir);

TreeNode TParent = new TreeNode(d.Name);

foreach (String s in parentDir)

{

FileInfo f = new FileInfo(s);

TreeNode subItems = new TreeNode(f.Name);

TParent.Nodes.Add(subItems);

}

DirFilesCollection.Nodes.Add(TParent);

foreach (string dn in Directory.GetDirectories(dir))

{

stack.Push(dn);

}

}

catch

{}

}

Action clearTreeView = () => treeView.Nodes.Clear();

this.Invoke(clearTreeView);

Action showTreeView = () => treeView.Nodes.Add(DirFilesCollection);

this.Invoke(showTreeView);

}

回答:

private void ListDirectory(TreeView treeView, string path)

{

treeView.Nodes.Clear();

var rootDirectoryInfo = new DirectoryInfo(path);

treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));

}

private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)

{

var directoryNode = new TreeNode(directoryInfo.Name);

foreach (var directory in directoryInfo.GetDirectories())

directoryNode.Nodes.Add(CreateDirectoryNode(directory));

foreach (var file in directoryInfo.GetFiles())

directoryNode.Nodes.Add(new TreeNode(file.Name));

return directoryNode;

}

private static void ListDirectory(TreeView treeView, string path)

{

treeView.Nodes.Clear();

var stack = new Stack<TreeNode>();

var rootDirectory = new DirectoryInfo(path);

var node = new TreeNode(rootDirectory.Name) { Tag = rootDirectory };

stack.Push(node);

while (stack.Count > 0)

{

var currentNode = stack.Pop();

var directoryInfo = (DirectoryInfo)currentNode.Tag;

foreach (var directory in directoryInfo.GetDirectories())

{

var childDirectoryNode = new TreeNode(directory.Name) { Tag = directory };

currentNode.Nodes.Add(childDirectoryNode);

stack.Push(childDirectoryNode);

}

foreach (var file in directoryInfo.GetFiles())

currentNode.Nodes.Add(new TreeNode(file.Name));

}

treeView.Nodes.Add(node);

}

以上是 使用文件系统目录结构填充TreeView 的全部内容, 来源链接: utcz.com/qa/408667.html

回到顶部