2014-01-17 23 views
1

不一致我已经看到了这个问题:Is this a bug in DirectoryInfo.GetDirectories(string searchPattern)?Directory.GetFiles是searchPattern与文档

这不是我的问题是完全一致的,所以我会问反正。

我的代码是:

var pattern = @"file.*"; 
foreach (var file in Directory.GetFiles(".", pattern)) 
{ 
    Console.WriteLine(file); 
} 

在我的当前目录中我有filefile.txt。作为(不)预期,找到两个文件。

这是一个错误还是记录在案某处?我在Mono上发现了这个问题,并想在那里提交一个错误,但我首先检查了VS2012,它似乎也发生了...

当然,我知道如何过滤结果,但它无论如何,激怒了我,所以我想知道消息来源。

+0

['Directory.GetFiles'](http://msdn.microsoft.com/zh-cn/library/wz42302f%28v=vs.110%29.aspx)记录了搜索模式的一些怪癖(在其“ Notes“),它们被用来追溯性地支持8.3文件名约定。我假设你正在观察的行为是另一个结果。 – Douglas

+0

这正是我想要记录的内容... –

回答

6

这是Windows(和DOS)如何解释通配符。与UNIX不同,Windows一次在内部实际上区分了文件名的“名称”部分和“扩展”部分(这是臭名昭着的“8.3”限制来自哪里)。它并没有真正实现这种内在的区别,但是它的遗留在Windows中仍然存在。

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

我会倾向于同意,这并没有多大意义,但事实就是这样。

+0

这种行为是否记录在某处? –

+0

@SergeyBerezovskiy这里可能有更多的权威信息,但是[我确实发现了这篇MSDN博客文章](http://blogs.msdn.com/b/oldnewthing/archive/2007/12/17/6785519.aspx)关于它,在文章的底部。 – TypeIA

+0

@SergeyBerezovskiy不明确,但这是GetFiles方法的文档:http://msdn.microsoft.com/de-de/library/wz42302f%28v=vs.110%29.aspx如果您还考虑到'.'在(Win-)Dos-World中不是通配符,但它是非常合理的分隔符 – DrCopyPaste

相关问题