从列表重建树视图<DirectoryInfo>
Reconstruct Tree view from List<DirectoryInfo>
我有一个函数 GetDirectories(),它 return 为我提供了目录信息列表:现在我需要根据它的父级
从中重建一个树视图
这是我的函数 Getdirectories
其中 return List
:
public List<DirectoryInfo> GetDirectories()
{
DirectoryInfo di = new DirectoryInfo("D:\python_code");
folders.Clear();
FullDirList(di, "*");
return folders;
}
static List<DirectoryInfo> folders = new List<DirectoryInfo>(); // List that hold direcotries that cannot be accessed
static void GetFullDirList(DirectoryInfo dir, string searchPattern)
{
try
{
foreach (FileInfo f in dir.GetFiles(searchPattern))
{
files.Add(f);
}
}
catch
{
}
foreach (DirectoryInfo d in dir.GetDirectories())
{
folders.Add(d);
FullDirList(d, searchPattern);
}
}
我需要从 List 构造类似这样的东西,它包含所有 DirectoryInfo 元素,即它还包含其父信息。
到目前为止,我正在尝试获取其父级相同的元素并将其填充到树视图并递归执行:
但是我无法获得通过 .
编写的递归函数
我知道他们有其他更简单的方法来做同样的事情,但这是我正在尝试绘制的一幅大图的招募。
任何帮助将不胜感激。
假设您有 WinForms 树视图,您可以使用 Find
method on the Nodes
集合的关键参数来构建您的层次结构。你不需要递归。这是添加方法:
void Add(DirectoryInfo di)
{
if (di.Parent != null )
{
// find our parent node
var node = treeView1.Nodes.Find(di.Parent.FullName,true);
if (node.Length == 0)
{
// not found, add it as root
// FullName becomes the key
treeView1.Nodes.Add(di.FullName, di.Name);
}
else
{
// not sure what is going on if node.Length > 1
// anyway, add it to the first node, to be our parent
node[0].Nodes.Add(di.FullName, di.Name);
}
}
else
{
treeView1.Nodes.Add(di.FullName, di.Name);
}
}
一个简单的迭代器将驱动这个方法:
var list = GetDirectories();
foreach(var di in list)
{
Add(di);
}
我有一个函数 GetDirectories(),它 return 为我提供了目录信息列表:现在我需要根据它的父级
从中重建一个树视图这是我的函数 Getdirectories
其中 return List
:
public List<DirectoryInfo> GetDirectories()
{
DirectoryInfo di = new DirectoryInfo("D:\python_code");
folders.Clear();
FullDirList(di, "*");
return folders;
}
static List<DirectoryInfo> folders = new List<DirectoryInfo>(); // List that hold direcotries that cannot be accessed
static void GetFullDirList(DirectoryInfo dir, string searchPattern)
{
try
{
foreach (FileInfo f in dir.GetFiles(searchPattern))
{
files.Add(f);
}
}
catch
{
}
foreach (DirectoryInfo d in dir.GetDirectories())
{
folders.Add(d);
FullDirList(d, searchPattern);
}
}
我需要从 List 构造类似这样的东西,它包含所有 DirectoryInfo 元素,即它还包含其父信息。
到目前为止,我正在尝试获取其父级相同的元素并将其填充到树视图并递归执行: 但是我无法获得通过 .
编写的递归函数我知道他们有其他更简单的方法来做同样的事情,但这是我正在尝试绘制的一幅大图的招募。 任何帮助将不胜感激。
假设您有 WinForms 树视图,您可以使用 Find
method on the Nodes
集合的关键参数来构建您的层次结构。你不需要递归。这是添加方法:
void Add(DirectoryInfo di)
{
if (di.Parent != null )
{
// find our parent node
var node = treeView1.Nodes.Find(di.Parent.FullName,true);
if (node.Length == 0)
{
// not found, add it as root
// FullName becomes the key
treeView1.Nodes.Add(di.FullName, di.Name);
}
else
{
// not sure what is going on if node.Length > 1
// anyway, add it to the first node, to be our parent
node[0].Nodes.Add(di.FullName, di.Name);
}
}
else
{
treeView1.Nodes.Add(di.FullName, di.Name);
}
}
一个简单的迭代器将驱动这个方法:
var list = GetDirectories();
foreach(var di in list)
{
Add(di);
}