DirectoryInfo.GetFiles通配符在C、D盘表现异常问题求助
问题排查与解决方案
这是Windows文件系统8.3短命名规则与.NET文件搜索逻辑的兼容性问题——你禁用C盘8.3命名后,已存在文件的短文件名不会自动清除,这是问题未解决的核心原因。
排查与修复步骤
- 确认文件的8.3短名:打开命令提示符,进入目标文件夹,执行
dir /x命令。你会发现.xlsx文件的短名称格式为XXX~1.XLS,这正是*.xls通配符搜索会匹配到它的原因。 - 清除现有文件的短名:对每个
.xlsx文件执行命令fsutil file setshortname "目标文件.xlsx" "",手动清空其8.3短文件名。 - 验证修复效果:重新调用
DirectoryInfo.GetFiles("*.xls"),此时应仅返回真正的.xls格式文件。
彻底规避方案
如果不想依赖文件系统的短名规则,建议改用精确的扩展名过滤替代通配符搜索,示例代码如下:
var targetDir = new DirectoryInfo(@"C:\你的目标文件夹路径"); var xlsOnlyFiles = targetDir.GetFiles() .Where(file => file.Extension.Equals(".xls", StringComparison.OrdinalIgnoreCase)) .ToList();
该方式直接对比文件扩展名,完全不受8.3命名规则影响。
内容的提问来源于stack exchange,提问作者Priyanka
相关产品推荐
相关产品推荐

