当搜索模式包含3个扩展字符时,.NET的Directory.GetFiles()中的奇怪功能

use*_*419 6 .net system.io.directory getfiles

我最近碰到了微软的一个奇怪的功能:

假设我们的文件夹c:\tmp123包含3个文件 -
1.txt
2.txtx
3.txtxt

a)Directory.GetFiles(@"C:\tmp123", "*.txt")在3个退货项目中调用收益率.
b)Directory.GetFiles(@"C:\tmp123", "*.txtx")在1个退回的项目中调用收益率.

据微软称,这是预期的行为(参见MSDN中的注释).

我的问题是:

  1. 为什么微软决定拥有这样一个奇怪的功能?

  2. 我怎样才能克服这个问题?
    即我怎么有一个搜索模式,将返回*.txt唯一的扩展,而不是返回*.txtx,*.txtstarngefunctionality等?

Aak*_*shM 0

我愿意打赌这与向后兼容性有关。我没有看到提到这个确切的问题,但是Raymond Chen 的这篇博文提到了这个领域的一些奇怪之处:

[...] FCB 匹配算法的一些怪癖在 Win32 中仍然存在,因为它们已经成为习惯用法。

例如,如果您的模式以 结尾.*,则 .*会被忽略。如果没有这条规则,该模式*.*将只匹配包含点的文件,这可能会破坏地球上 90% 的批处理文件,以及每个人的肌肉记忆,因为每个运行 Windows NT 3.1 的人都是在一个*.*意味着全部文件。

作为另一个示例,以点结尾的模式实际上并不匹配以点结尾的文件;它匹配没有扩展名的文件。如果问号紧接在点之前,则可以匹配零个字符。