最推荐使用 Directory.EnumerateFiles 处理大目录或需逐个处理的场景,它返回 IEnumerable,内存占用低、默认跳过无权限子目录;Directory.GetFiles 适合小目录且需一次性获取全部路径,但易内存暴涨且不支持动态筛选。
Directory.GetFiles 一次性获取所有文件路径
最直接的方式是用 Directory.GetFiles,它返回 string[],包含匹配条件的完整文件路径。默认不递归,只查当前目录:
string[] files = Directory.GetFiles(@"C:\MyFolder");
加第三个参数可递归搜索:SearchOption.AllDirectories;用第二个参数可过滤扩展名,比如 "*.txt"。
- 注意:如果目录不存在或无权限,会直接抛
DirectoryNotFoundException或UnauthorizedAccessException,不能靠返回空数组判断失败 - 大目录下容易内存暴涨——所有路径一次性加载进内存,不用
foreach遍历时也已分配完毕 - 不支持按修改时间、大小等动态条件筛选,纯字符串匹配
Directory.EnumerateFiles 更适合逐个处理大目录
当文件数多、或只需遍历处理(如日志扫描、批量重命名),优先选 Directory.EnumerateFiles。它返回 IEnumerable,边枚举边 yield,内存占用低: