动态枚举对象/文件夹结构C#



我有一个文件夹和文件的结构,我想在TreeView中读取并显示这些文件夹和文件。文件夹和文件都是我的C#Visual Studio环境中的对象。

文件夹对象包含:

  • 文件集合
  • 文件夹的集合

结构的顶层是一个文件夹。我从阅读开始,并使用foreach循环来获取此顶级中的所有文件。然后我需要阅读文件夹的集合,看看顶部文件夹是否包含其他文件夹。对于每个文件夹,我都需要重复同样的过程。

我可以从结构的顶层开始,检查该文件夹是否包含文件夹,但问题是我不知道该结构有多少层。文件夹可以相互嵌套,级别不受限制。如果我使用foreach循环,我必须将它们嵌套在一起,但嵌套循环的数量将决定我将读入多少层。

我正在寻找一个动态的解决方案,不断阅读结构,直到我到达最后一层,而不需要使用不必要的代码。

有人有解决方案吗?

图片1

结构的图像。图像中的所有文件夹和文件都可以作为对象进行访问。

图片2

用于在结构中循环的代码的图像。

使用BFS是很自然的(https://en.wikipedia.org/wiki/Breadth-firstrongearch)或递归。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 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);
}
}

相关内容

  • 没有找到相关文章

最新更新