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

时间:2017-10-31 09:01:21

标签: c# object treeview structure treenode

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

文件夹对象包含:

  • 文件集
  • 文件夹集合

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

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

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

有没有人有解决方案?

PICTURE 1

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

PICTURE 2

用于遍历结构的代码的图像。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你需要做递归。样本如下

yyyymmdd