如何使用C#DirectoryInfo枚举包含所有子目录的文件?
我找到了从如何使用C#DirectoryInfo枚举包含所有子目录的文件?,c#,winforms,file-io,enumeration,directoryinfo,C#,Winforms,File Io,Enumeration,Directoryinfo,我找到了从DirectoryInfo中获取文件数组的代码: FileInfo[] fileInfoArray = di.EnumerateFiles().Where(f => extensions.Contains(f.Extension.ToLower())).ToArray(); 但它只搜索DirectoryInfo路径的直接子级。i、 例如,它不包括孙子女 我想我需要添加SearchOption.AllDirectories参数到某个地方,但在哪里 我试过: di.Enumerat
DirectoryInfo
中获取文件数组的代码:
FileInfo[] fileInfoArray = di.EnumerateFiles().Where(f => extensions.Contains(f.Extension.ToLower())).ToArray();
但它只搜索DirectoryInfo
路径的直接子级。i、 例如,它不包括孙子女
我想我需要添加SearchOption.AllDirectories
参数到某个地方,但在哪里
我试过:
di.EnumerateFiles(SearchOption.AllDirectories).Where(f => extensions.Contains(f.Extension.ToLower())).ToArray();
但它会产生一个错误
那么,如何使用模式进行搜索,包括所有子目录
谢谢你的帮助 查看的重载-没有重载只使用SearchOption
,但您可以提供一个字符串和一个SearchOption
:
var files = di.EnumerateFiles("*", SearchOption.AllDirectories)
.Where(f => extensions.Contains(f.Extension.ToLower()))
.ToArray();
你跑得太快了,我们没有得分的机会。我不知道
“*”
。谢谢:)可以在8分钟内接受。这正是我需要的,谢谢。仍然不被接受顺便说一句:PDon不使用此选项,因为在Windows文件系统中迭代此选项(IENUMERABLE,例如使用foreach)非常危险,因为可能存在访问限制。在这样的代码中,通过“文件”循环的目录中有不少会抛出异常。阅读:“枚举所有目录中的FileInfo对象集合”。您需要将EnumerateFiles和EnumerateDirectory嵌套为一个解决方案,因为EnumerateFiles似乎只在第一个目录级别上是“安全的”。@Philm:它没有那么简单。当然,如果您是从根目录或系统目录等,这可能会引发异常-但在许多情况下,如果调用者更了解他们正在使用的目录结构,则不需要额外的复杂性。(我也会认为“非常危险”)是相当夸张的夸张——我会说,如果它对你的系统造成重大伤害,那么“非常危险”。除非你在代码中有其他更严重的问题,否则抛出的异常不会破坏你的系统。)