2014-01-17 44 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

相關問題