如何用Directory.GetFiles高效搜索含多个关键词的文件?
单次搜索匹配多个关键词的文件解决方案
你当前的代码只能单次匹配单个关键词,要实现同时查找包含kword1或kword2的文件,无需分两次搜索,推荐用以下高效方案:
方法:结合枚举与LINQ筛选
用Directory.EnumerateFiles(延迟加载,比GetFiles更适合大目录场景)获取所有.txt文件,再通过LINQ筛选文件名包含任意关键词的结果,一次遍历完成所有匹配:
using System.Linq; using System.IO; string[] targetKeywords = { kword1, kword2 }; string[] matches = Directory.EnumerateFiles(path1, "*.txt", SearchOption.AllDirectories) .Where(filePath => targetKeywords.Any(keyword => Path.GetFileName(filePath).Contains(keyword) ) ) .ToArray();
关键细节:
- 用
Path.GetFileName(filePath)仅检查文件名,避免路径中包含关键词导致误匹配 - 若需要不区分大小写的匹配,可修改
Contains方法:Path.GetFileName(filePath).Contains(keyword, StringComparison.OrdinalIgnoreCase) EnumerateFiles会逐个返回文件,无需一次性加载所有文件路径到内存,在文件数量多的场景下性能更优
内容的提问来源于stack exchange,提问作者i.fathy
相关产品推荐
相关产品推荐

