Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#DirectoryInfo枚举包含所有子目录的文件?_C#_Winforms_File Io_Enumeration_Directoryinfo - Fatal编程技术网

如何使用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:它没有那么简单。当然,如果您是从根目录或系统目录等,这可能会引发异常-但在许多情况下,如果调用者更了解他们正在使用的目录结构,则不需要额外的复杂性。(我也会认为“非常危险”)是相当夸张的夸张——我会说,如果它对你的系统造成重大伤害,那么“非常危险”。除非你在代码中有其他更严重的问题,否则抛出的异常不会破坏你的系统。)