【问题标题】:Recursive iteration in C#C#中的递归迭代
【发布时间】:2011-01-27 10:35:22
【问题描述】:

我有一个自定义对象,其中包含返回根目录和文件名的方法

string[] dirlist = obj.GetDirectories();

//which returns all dir names in root

string[] filelist = obj.GetFiles();

//which return all file names in root

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

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

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

【问题讨论】:

  • 你能提供一个你想要达到的结果的例子吗?
  • 不是 100% 确定你想要什么,你只是想递归获取所有文件夹和文件吗?
  • 是的,一旦我获得了目录列表,我想遍历每个目录并获取嵌套子目录的列表,最后在该子目录中归档
  • @lea do dirlistfilelist 返回所有文件夹和文件,包括根目录的子文件夹?它们都返回完整路径吗?
  • 不,这就是问题所在..dirlist 只返回目录名称。我必须以某种方式从这些名称中获取子目录

标签: c# linq


【解决方案1】:

已经有内置的 .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));

【讨论】:

  • 是的,我在路径中给出了什么......这就是问题所在。实际上他们给我的 API 很糟糕。
  • 糟糕,将dirList.Select 更改为dirList.SelectMany
  • 这段代码是否也会获取子目录中的目录?我的意思是它可以嵌套到任何级别。例如:一个子目录可能包含一些文件和一些可能包含文件和目录的更多目录等等。我想把它们都列出来。
  • 是的,它会递归下去,从所有子目录中获取所有文件/目录,不管多深。
  • 好的,谢谢最后一个问题。我已经更新了问题以显示我想要的输出的预览。我如何获得输出..我应该将结果存储在列表中还是在控制台上打印。任何想法如何做他们中的任何一个
【解决方案2】:

看看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:\ 下的所有目录,然后是每个目录中的所有文件。 这有帮助吗?

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 2016-01-05
    • 2020-08-17
    • 2012-10-22
    • 2019-06-20
    • 2012-10-17
    • 2019-12-10
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多