如何使用C#DirectoryInfo枚举所有子目录的文件?

jef*_*eff 3 c# file-io enumeration directoryinfo winforms

我发现这个代码从以下内容中获取了一个文件数组DirectoryInfo:

FileInfo[] fileInfoArray = di.EnumerateFiles().Where(f => extensions.Contains(f.Extension.ToLower())).ToArray();
Run Code Online (Sandbox Code Playgroud)

但它只搜索直接的孩子的路径DirectoryInfo.即,它不包括孙子.

我想我需要在SearchOption.AllDirectories某个地方添加参数,但在哪里?

我试过了 :

di.EnumerateFiles(SearchOption.AllDirectories).Where(f => extensions.Contains(f.Extension.ToLower())).ToArray();
Run Code Online (Sandbox Code Playgroud)

但它会产生错误.

那么如何使用模式进行搜索,包括所有子目录?

谢谢你的帮助 !

Jon*_*eet 9

看看重载DirectoryInfo.EnumerateFiles- 只有一个没有重载SearchOption,但你可以给一个字符串和一个SearchOption:

var files = di.EnumerateFiles("*", SearchOption.AllDirectories)
              .Where(f => extensions.Contains(f.Extension.ToLower()))
              .ToArray();
Run Code Online (Sandbox Code Playgroud)

  • @Philm:它不是那么黑白分明。当然,如果您从根目录或系统目录等进入,这可能会引发异常 - 但在许多情况下,调用者更了解他们正在使用的目录结构,因此不需要额外的复杂性。(我还认为“极其危险”是相当夸张的 - 如果某些东西会对您的系统造成重大损害,我会说它是“极其危险”。抛出的异常不会破坏您的系统,除非您您的代码中还有其他更严重的问题。) (4认同)