1 MSDN上关于DirectoryInfo.GetFiles()搜索模式的说明
先看关于DirectoryInfo.GetFiles()的MSDN文档:
public FileInfo[] GetFiles( string searchPattern, SearchOption searchOption )
在 searchPattern 中使用星号通配符时(例如,“*.txt”),匹配行为会根据指定文件扩展名的长度而有所不同。文件扩展名正好是三个字符的searchPattern 将返回扩展名为三个或更多字符的文件,其中前三个字符与searchPattern |
以下列表显示了 searchPattern 参数的不同长度的行为:
-
“*.abc”返回扩展名为 .abc、.abcd、.abcde、.abcdef 等的文件。
-
“*.abcd”只返回扩展名为 .abcd 的文件。
-
“*.abcde”只返回扩展名为 .abcde 的文件。
-
“*.abcdef”只返回扩展名为 .abcdef 的文件。
2 实际执行测试
然后执行如下测试代码:
using System; using System.IO; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { DirectoryInfo di = new DirectoryInfo(@"F:\test"); DirectoryInfo di2 = new DirectoryInfo(@"Y:\test"); FileInfo[] fis = di.GetFiles("*.doc", SearchOption.AllDirectories); FileInfo[] fis2 = di2.GetFiles("*.doc", SearchOption.AllDirectories); Console.WriteLine("位于本地硬盘上的文件夹"); foreach (FileInfo fi in fis) { Console.WriteLine(fi.Name); } Console.WriteLine("位于SAMBA服务器上的文件夹"); foreach (FileInfo fi in fis2) { Console.WriteLine(fi.Name); } } } }
注:代码中的两个文件夹"F:\test"与"Y:\test"是内容完全一样的,其中Y是一个映射分区,内容实际是一台samba服务器共享的文件夹,里面是一些Word文档,内容如下:
再看看程序的运行结果:
3 测试结果分析
可见,如果是本地硬盘,那么确实如MSDN所说,*.doc既会匹配.doc也会匹配.docx文档。但是如果目录所在地不是本地硬盘(本例是Linux上的samba共享),那么就只会匹配.doc而不会匹配.docx。
这也说明了MSDN的说法不够准确,至少不全面。希望对大家有所帮助。