C#:使用目录名通配符列出文件时遇非法字符异常,如何解决?
C# 实现目录名带通配符的文件搜索
你之前的代码报错,是因为Directory.GetFiles仅允许在路径的**最后一段(文件名部分)**使用通配符,路径中间的目录位置用*会被判定为非法字符。要实现目录名带通配的搜索,需要分两步处理:
- 第一步:枚举目标父目录下的所有匹配子目录(比如
C:\Users下的所有用户文件夹) - 第二步:遍历这些子目录,拼接目标文件路径并检查是否存在
基础实现代码
// 获取C:\Users下的所有用户目录 var userDirectories = Directory.GetDirectories(@"C:\Users"); List<string> foundFiles = new List<string>(); foreach (var userDir in userDirectories) { // 拼接目标文件路径 var targetFilePath = Path.Combine(userDir, @"Desktop\statistics.txt"); // 检查文件是否存在 if (File.Exists(targetFilePath)) { foundFiles.Add(targetFilePath); } }
LINQ简化写法
如果习惯用LINQ,可以用更简洁的链式调用:
var foundFiles = Directory.GetDirectories(@"C:\Users") .Select(userDir => Path.Combine(userDir, @"Desktop\statistics.txt")) .Where(File.Exists) .ToList();
进阶:过滤特定模式的用户目录
如果需要对用户目录名做匹配(比如只找以admin开头的用户文件夹),可以在枚举目录时指定搜索模式:
var userDirectories = Directory.EnumerateDirectories(@"C:\Users", "admin*");
内容的提问来源于stack exchange,提问作者morismoris
相关产品推荐
相关产品推荐

