Directory.GetFiles(..) 与模式 *.???返回有趣的结果

本文关键字:返回 结果 GetFiles 模式 Directory | 更新日期: 2023-09-27 18:36:15

我使用以下代码:

var di = new DirectoryInfo("path/to/dir");
var matchingFiles = di.GetFiles("*.???);

正如预期的那样,像这样的文件

  • 文件.bat
  • 测试.1.xml
  • 答.txt.txt

被退回。但是,有一些有趣的结果。正如MS文档所提到的,也会搜索短名称。我还找到了有关在 .NET 4+ 中工作的点选择器的信息。我仍然看不出这解释了以下结果:

  • 文件1.xml.2
  • afilewithoutextension

Q1:如何解释这个结果。

Q2:如何匹配模式*。实现 [3 个任意字符]。

Directory.GetFiles(..) 与模式 *.???返回有趣的结果

Q2)你可以改用LINQPath类:

var files = Directory.EnumerateFiles("path/to/dir", "*.*")
    .Where(file => Path.GetExtension(file).TrimStart('.').Length == 3);

如何解释这个结果。

正如您所注意到的,短名称总是被搜索;并且它们总是有一个三个字符的扩展名(即使这些字符是空格)。

如何匹配模式*。实现 [3 个任意字符]。

检查您的代码(例如,使用正则表达式)。MS-DOS 通配符非常有限,向后兼容性要求使它们更弱;它们实际上只对特定匹配有用,而不是常规过滤。