C# 动态枚举对象/文件夹结构#
我有一个文件夹和文件的结构,我想在树视图中读取和显示。文件夹和文件都是我的C#Visual Studio环境中的对象 文件夹对象包含:C# 动态枚举对象/文件夹结构#,c#,object,treeview,structure,treenode,C#,Object,Treeview,Structure,Treenode,我有一个文件夹和文件的结构,我想在树视图中读取和显示。文件夹和文件都是我的C#Visual Studio环境中的对象 文件夹对象包含: 文件集 文件夹集合 结构的顶层是一个文件夹。我从阅读开始,使用foreach循环获取顶层中的所有文件。然后,我需要读取文件夹集合,以查看顶部文件夹是否包含其他文件夹。对于每个文件夹,我需要重复相同的过程 我可以从结构的顶层开始,检查该文件夹是否包含文件夹,但问题是我不知道该结构存在多少层。文件夹可以相互嵌套,级别不限。如果我使用foreach循环,我必须将它
- 文件集
- 文件夹集合
用于在结构中循环的代码的图像。您需要执行递归。样本如下
static void Main(string[] args)
{
DeviceUserGroup folder = GetTopLevelGroupAsYouWish();
BuildHierarchy (folder);
Console.ReadKey();
}
static void BuildHierarchy(DeviceUserGroup userGroup)
{
try
{
foreach (Device device in userGroup.Devices)
Console.WriteLine(device.Name);
foreach (DeviceUserGroup group in userGroup.Groups)
{
Console.WriteLine(group.Name);
BuildHierarchy(group);
}
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
}
使用BFS()或递归是很自然的。BFS按层通过目录层次结构,如果使用递归版本,则存在堆栈溢出的危险
例如:
static void SearchDir(string dirPath)
{
Queue<string> queue = new Queue<string>();
queue.Enqueue(dirPath);
while(queue.Count() != 0)
{
var actualDir = queue.Dequeue();
foreach(var file in Directory.GetFiles(actualDire)
//Output info about all files in the directory
foreach(var dir in Directory.GetDirectories(actualDir)
{
//Output info about all directories in the directory
queue.Enqueue(dir);
}
}
}
static void SearchDir(字符串dirPath)
{
队列=新队列();
排队(dirPath);
while(queue.Count()!=0)
{
var actualDir=queue.Dequeue();
foreach(目录.GetFiles(actualDire)中的var文件)
//输出有关目录中所有文件的信息
foreach(目录中的var dir.GetDirectories(actualDir)
{
//输出有关目录中所有目录的信息
排队(dir);
}
}
}
您可以递归遍历树这是您的答案…问题是结构无法通过文件路径访问。对象是从连接到外部软件程序的API检索的。这给了我一个最高层的文件夹对象。我必须在Visual Studio中本地读取此文件夹,因此无法使用递归。我添加了另一张图片来向您展示我所做的过程。根据图片2更改了代码