C# Directory.GetFiles搜索模式与文档不一致

C# Directory.GetFiles搜索模式与文档不一致,c#,.net,C#,.net,我看到了这个问题: 这与我的问题不完全一致,所以我还是要问 我的代码是: var pattern = @"file.*"; foreach (var file in Directory.GetFiles(".", pattern)) { Console.WriteLine(file); } 在我当前的目录中,我有文件和文件.txt。正如(un)所预期的,两个文件都已找到 它是一个bug还是在某个地方有文档记录?我在Mono上发现了这个问题,并想在那里提交一个bug,但我首先检查了VS2

我看到了这个问题:

这与我的问题不完全一致,所以我还是要问

我的代码是:

var pattern = @"file.*";
foreach (var file in Directory.GetFiles(".", pattern))
{
    Console.WriteLine(file);
}
在我当前的目录中,我有
文件
文件.txt
。正如(un)所预期的,两个文件都已找到

它是一个bug还是在某个地方有文档记录?我在Mono上发现了这个问题,并想在那里提交一个bug,但我首先检查了VS2012,它似乎也发生了

当然我知道如何过滤结果,但它。。。无论如何,我都很生气,所以我想知道通配符的来源。

这就是Windows(和DOS)解释通配符的方式。与UNIX不同,Windows曾一度在内部区分了文件名的“名称”部分和“扩展名”部分(这就是臭名昭著的“8.3”限制的来源)。它实际上不再具有这种内在的区别,但它的遗产仍然存在于Windows中

因此,Windows/DOS搜索模式搜索两个组件:名称和扩展名。模式
file.*
匹配任何名为
file
的文件,扩展名为
*
(即任何扩展名)。
file
file.txt
都符合此标准

我倾向于认为这没有多大意义,但事实就是如此。

这就是Windows(和DOS)解释通配符的方式。与UNIX不同,Windows曾一度在内部区分了文件名的“名称”部分和“扩展名”部分(这就是臭名昭著的“8.3”限制的来源)。它实际上不再具有这种内在的区别,但它的遗产仍然存在于Windows中

因此,Windows/DOS搜索模式搜索两个组件:名称和扩展名。模式
file.*
匹配任何名为
file
的文件,扩展名为
*
(即任何扩展名)。
file
file.txt
都符合此标准


我倾向于认为这没有多大意义,但事实就是如此。

这种行为有没有记录在案?@SergeyBerezovskiy可能有更权威的信息,但在文章的底部,这是关于它的。@SergeyBerezovskiy没有明确地说,但这是GetFiles方法的文档:如果您还考虑到
在(Win-)Dos世界中不是通配符,而是一个分隔符,那么它会让人感觉非常好,我认为它是间接文档化的,因为它会搜索长文件名和格式。规定“没有扩展名的文件,
,如果存在,则没有意义。好的,谢谢您的输入。我想知道它是如何在Mono上实现的,因为它在Linux上的工作方式是相同的——必须有很多代码来模拟这种行为。无论如何,虽然我理解遗产的原因,但我认为这显然是愚蠢的。两种选择都允许会有多困难?嗯……这种行为有没有记录在案?@SergeyBerezovskiy可能有更权威的信息,但在文章的底部谈到了这一点。@SergeyBerezovskiy没有明确说明,但这是GetFiles方法的文档:如果您还考虑到
在(Win-)中没有通配符Dos的世界,但一个单独的它使完美的感觉,我认为它是间接记录,因为提到它搜索长文件名格式和。规定“没有扩展名的文件,
,如果存在,则没有意义。好的,谢谢您的输入。我想知道它是如何在Mono上实现的,因为它在Linux上的工作方式是相同的——必须有很多代码来模拟这种行为。无论如何,虽然我理解遗产的原因,但我认为这显然是愚蠢的。两种选择都允许会有多困难?好记录了搜索模式的一些怪癖(在其“注释”下),这些怪癖是为了追溯支持8.3文件名约定而实现的。我想你观察到的行为是另一个结果。这正是我想要记录的。。。记录了搜索模式的一些怪癖(在其“注释”下),这些怪癖是为了追溯支持8.3文件名约定而实现的。我想你观察到的行为是另一个结果。这正是我想要记录的。。。