我正在使用文件系统,并且我有一个文件对象的List<>,它将文件路径作为一个属性。基本上,我需要在.NET中创建一个树形视图,但我正在努力想出最好的方法来做这件事,因为我需要从一个列表中创建一个树形结构,比如:
C:/WINDOWS/Temp/ErrorLog.txt
C:/Program Files/FileZilla/GPL.html
C:/Documents and Settings/Administrator/ntuser.dat.LOG等等……
列表根本不是结构化的,我不能对当前的对象结构进行任何更改。
我在C#工作。
非常感谢所有做出贡献的人
发布于 2009-03-23 16:33:55
如果你想坚持使用字符串,像这样的东西是可行的…
TreeNode root = new TreeNode();
TreeNode node = root;
treeView1.Nodes.Add(root);
foreach (string filePath in myList) // myList is your list of paths
{
node = root;
foreach (string pathBits in filePath.Split('/'))
{
node = AddNode(node, pathBits);
}
}
private TreeNode AddNode(TreeNode node, string key)
{
if (node.Nodes.ContainsKey(key))
{
return node.Nodes[key];
}
else
{
return node.Nodes.Add(key, key);
}
}发布于 2009-03-23 16:24:27
我会把这个字符串变成一个FileInfo。
一旦拥有了FileInfo对象,就可以使用目录属性来检索每个路径的DirectoryInfo。
有了路径的文件名之后,很容易在DirectoryInfo中“遍历”父引用,将每个路径转换为一个目录列表+ DirectoryInfo - ie:
{"C:","Windows","Temp","ErrorLog.txt"}这应该是相当简单的插入到树视图中。只需依次查找路径的每个部分,如果不存在,则添加它……
发布于 2009-03-23 16:32:42
试一试递归。
private void AddFiles()
{
// Iterate your list with FileInfos here
foreach( var fileInfo in new Collection<FileInfo>() )
{
GetOrCreateTreeNode( fileInfo.Directory ).Nodes.Add( new TreeNode( fileInfo.Name ) );
}
}
private TreeNode GetOrCreateTreeNode( DirectoryInfo directory )
{
if( directory.Parent == null )
{
// Access your TreeView control here:
var rootNode = <TreeView>.Nodes[directory.Name];
if( rootNode == null )
{
rootNode = new TreeNode(directory.Name);
// Access your TreeView control here:
<TreeView>.Nodes.Add( rootNode );
}
return rootNode;
}
var parent = GetOrCreateTreeNode( directory.Parent );
var node = parent.Nodes[directory.Name];
if( node == null )
{
node = new DirectoryNode( directory );
parent.Nodes.Add( node );
}
return node;
}这段代码应该只给你一个想法--我必须承认我在这里发布之前没有测试过它。
https://stackoverflow.com/questions/673931
复制相似问题