C#如何检测路径下的子文件夹并递归搜索指定后缀名的文件
实现方案
你要的递归遍历子目录功能不需要自己写递归逻辑,直接用.NET内置的API即可,Directory.GetFiles 方法提供了第三个参数用来指定搜索范围,传入SearchOption.AllDirectories就可以自动遍历所有子文件夹。
你现有代码还有两个小问题需要修正:
- foreach循环里写死了搜索
*.txt,没有用到用户输入的后缀 - 没有做基础的输入校验和异常捕获,很容易因为输入错误或者权限问题直接崩溃
修正后的完整代码
using System; using System.IO; namespace FileSearchTool { class Program { static void Main(string[] args) { // 获取并校验输入路径 Console.WriteLine("请输入目标搜索路径:"); string path = Console.ReadLine().Trim(); if (!Directory.Exists(path)) { Console.WriteLine("输入的路径不存在,请检查后重试。"); return; } // 获取并处理后缀格式,兼容带点和不带点的输入 Console.WriteLine("请输入要搜索的文件后缀:"); string extension = Console.ReadLine().Trim(); if (!extension.StartsWith(".")) { extension = "." + extension; } try { // 第三个参数指定递归遍历所有子目录 string[] matchedFiles = Directory.GetFiles(path, $"*{extension}", SearchOption.AllDirectories); if (matchedFiles.Length == 0) { Console.WriteLine("未找到匹配后缀的文件。"); return; } Console.WriteLine($"共找到{matchedFiles.Length}个匹配文件:"); foreach (string file in matchedFiles) { // 如果需要输出完整路径,直接打印file变量即可 Console.WriteLine(Path.GetFileName(file)); } } catch (UnauthorizedAccessException) { Console.WriteLine("部分子文件夹无访问权限,无法完成全部搜索。"); } catch (Exception ex) { Console.WriteLine($"搜索出错:{ex.Message}"); } } } }
核心修改说明
- 递归遍历实现:
Directory.GetFiles的第三个参数传入SearchOption.AllDirectories,框架会自动递归遍历所有子目录,不需要手动写递归逻辑 - 后缀兼容处理:自动给不带
.的后缀补全前缀,用户输入txt或者.txt都能正常搜索 - 异常捕获:覆盖了路径不存在、无权限等常见异常,避免程序直接崩溃
- 修复了原代码foreach循环写死搜索
*.txt的问题,直接使用查询到的匹配文件数组遍历即可
内容的提问来源于stack exchange,提问作者Techy Shadow
相关产品推荐
相关产品推荐

