首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件系统TreeView

问文件系统TreeView
EN

Stack Overflow用户
提问于 2009-03-23 15:51:36
回答 5查看 12.1K关注 0票数 8

我正在使用文件系统,并且我有一个文件对象的List<>,它将文件路径作为一个属性。基本上,我需要在.NET中创建一个树形视图,但我正在努力想出最好的方法来做这件事,因为我需要从一个列表中创建一个树形结构,比如:

代码语言:javascript
复制
C:/WINDOWS/Temp/ErrorLog.txt
C:/Program Files/FileZilla/GPL.html
C:/Documents and Settings/Administrator/ntuser.dat.LOG

等等……

列表根本不是结构化的,我不能对当前的对象结构进行任何更改。

我在C#工作。

非常感谢所有做出贡献的人

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-23 16:33:55

如果你想坚持使用字符串,像这样的东西是可行的…

代码语言:javascript
复制
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);
    }
}
票数 16
EN

Stack Overflow用户

发布于 2009-03-23 16:24:27

我会把这个字符串变成一个FileInfo。

一旦拥有了FileInfo对象,就可以使用目录属性来检索每个路径的DirectoryInfo。

有了路径的文件名之后,很容易在DirectoryInfo中“遍历”父引用,将每个路径转换为一个目录列表+ DirectoryInfo - ie:

代码语言:javascript
复制
{"C:","Windows","Temp","ErrorLog.txt"}

这应该是相当简单的插入到树视图中。只需依次查找路径的每个部分,如果不存在,则添加它……

票数 4
EN

Stack Overflow用户

发布于 2009-03-23 16:32:42

试一试递归。

代码语言:javascript
复制
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;
}

这段代码应该只给你一个想法--我必须承认我在这里发布之前没有测试过它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/673931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档