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中的注释).
我的问题是:
为什么微软决定拥有这样一个奇怪的功能?
我怎样才能克服这个问题?
即我怎么有一个搜索模式,将返回*.txt唯一的扩展,而不是返回*.txtx,*.txtstarngefunctionality等?
我愿意打赌这与向后兼容性有关。我没有看到提到这个确切的问题,但是Raymond Chen 的这篇博文提到了这个领域的一些奇怪之处:
[...] FCB 匹配算法的一些怪癖在 Win32 中仍然存在,因为它们已经成为习惯用法。
例如,如果您的模式以 结尾
.*,则.*会被忽略。如果没有这条规则,该模式*.*将只匹配包含点的文件,这可能会破坏地球上 90% 的批处理文件,以及每个人的肌肉记忆,因为每个运行 Windows NT 3.1 的人都是在一个*.*意味着全部文件。作为另一个示例,以点结尾的模式实际上并不匹配以点结尾的文件;它匹配没有扩展名的文件。如果问号紧接在点之前,则可以匹配零个字符。