【问题标题】:Directory.GetFiles(...) with pattern *.??? returns funny resultsDirectory.GetFiles(...) 与模式 *.???返回有趣的结果
【发布时间】:2016-02-26 08:57:06
【问题描述】:

我正在使用以下代码:

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

正如预期的那样,文件像

  • file.bat
  • test.1.xml
  • a.txt.txt

被退回。然而,有一些有趣的结果。正如the MS-documentation 提到的,短名称也被搜索。我还找到了the information about the dot-selector working in .NET 4+。我仍然看不到这解释了以下结果:

  • file1.xml.2
  • 没有扩展名的文件

Q1:如何解释这个结果。

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

【问题讨论】:

  • 尝试添加SearchOption.TopDirectoryOnly:Directory.GetFiles("path/to/dir", "*.???",SearchOption.TopDirectoryOnly)

标签: c# .net directory filenames


【解决方案1】:

Q2)您可以改用LINQ 和Path class:

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

【讨论】:

    【解决方案2】:

    如何解释这个结果。

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

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

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

    【讨论】:

    • 任何总是包含.3 部分的短名称来源?
    • @ChriPf FAT 目录的底层数据结构。
    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    相关资源
    最近更新 更多