C#中的递归迭代

时间:2011-01-27 10:35:23

标签: c# linq

我有一个自定义对象,其中包含返回根

中所有目录和文件名的方法
string[] dirlist = obj.GetDirectories();

//which returns all dir names in root

string[] filelist = obj.GetFiles();

//which return all file names in root

我无法修改这些方法。一旦我得到了dirlist,我如何获得其中所有子目录的列表以及子目录中的文件,忽略安全异常。它可以嵌套到多个级别。 .NET 4中的任何内容?

更新:string [] dirList也可以读作List dirlist。请提供一个使用.NET最新功能的解决方案

DirectoryOne  
 - SubDirOne  
 - SubDirTwo  
     - FileOne  
     - FileTwo
     - SubDirThree      
DirectoryTwo
DirectoryOne

2 个答案:

答案 0 :(得分:9)

已经有内置的.NET方法来执行此操作:

// get all files in folder and sub-folders
Directory.GetFiles(path, "*", SearchOption.AllDirectories);

// get all sub-directories
Directory.GetDirectories(path, "*", SearchOption.AllDirectories);

不知怎的,我觉得这不是你想要的解决方案。

<强>更新 我想我可能知道你要问的是什么,因为你把它标记为LINQ。如果要获取给定目录列表的所有子目录和子文件夹的列表,可以使用以下代码:

// get all files given a collection of directories as a string array
dirList.SelectMany(x => Directory.GetFiles(x, "*", SearchOption.AllDirectories));

// get all sub-directories given a collection of directories as a string array
dirList.SelectMany(x => x.Directory.GetDirectories(x, "*", SearchOption.AllDirectories));

答案 1 :(得分:0)

查看Directory Class

foreach(string dir in Directory.GetDirectories("c:\","",SearchOption.AllDirectories))
{
 Console.Writeline(dir);
 foreach(string file in Directory.GetFiles(dir))
 {
   Console.Writline(file);
 } 
}

这将打印C:\下的所有目录,然后打印每个目录中的所有文件。 这有帮助吗?