我见过这个问题:Is this a bug in DirectoryInfo.GetDirectories(string searchPattern)?
这与我的问题并不完全一致,所以无论如何我都会问。
我的代码是:
var pattern = @"file.*";
foreach (var file in Directory.GetFiles(".", pattern))
{
Console.WriteLine(file);
}
在我目前的目录中,我有file
和file.txt
。正如(未)预期的那样,找到了两个文件。
它是一个错误还是记录在某个地方?我在Mono上发现了这个问题并想在那里提交一个bug,但我先检查了VS2012,它似乎也出现了......
当然我知道如何过滤结果,但它......无论如何都让我感到愤怒,所以我想知道这些来源。
答案 0 :(得分:6)
这是Windows(和DOS)解释通配符的方式。与UNIX不同,Windows在内部实际上区分了文件名的“名称”部分和“扩展”部分(这是臭名昭着的“8.3”限制来自的地方)。它不再具有这种内部区别,但其遗留在Windows中。
因此Windows / DOS搜索模式搜索两个组件,名称和扩展名。模式file.*
匹配名为file
的任何文件,其扩展名为*
(即,任何扩展名)。 file
和file.txt
都符合此标准。
我倾向于同意这没有多大意义,但事实就是如此。