为什么DirectoryInfo.GetFiles()匹配与掩码不匹配的文件?

时间:2009-04-24 15:11:13

标签: c# windows

基本上,我有这段代码:

DirectoryInfo dir = new DirectoryInfo(@"\\MYNETWORK11\ABCDEFG\ABCDEFGHIJKL\00806\");
FileInfo[] files = dir.GetFiles("200810*");

我希望它匹配任何以200810开头的文件。但是,它匹配名为

的文件

20070618_00806.bak和20070817_00806.bak (星号不在文件名中,这是我可以包含下划线的唯一方式)

我在命令提示符下使用dir尝试了它,它也匹配这些文件。为什么呢?

编辑:

也许使用C:因为这个例子不是一件好事。我实际查询的目录是网络共享 \\ MYNETWORK11 \ ABCDEFG \ ABCDEFGHIJKL \ 00806 \

如果检查短名称与它有关,20070817_00806.bak不会是200708~1.bak吗?这与

不匹配

4 个答案:

答案 0 :(得分:14)

msdn表示

  

“因为此方法检查   具有8.3文件名的文件名   格式和长文件名格式,   搜索模式类似于“*1*.txt”   可能会返回意外的文件名。对于   例如,使用搜索模式   “*1*.txt”将返回   “longfilename.txt”因为   相当于8.3文件名格式   是“longf~1.txt”。“

这可能是原因吗?

答案 1 :(得分:6)

从命令行尝试:

dir /x 200810*

“/ x”将显示短文件名以及长文件名。这可以让你看看短文件名是否真的以“200810”开头。

答案 2 :(得分:4)

我无法通过命令行或测试应用程序重现此问题:

c:\Users\Jon\Test>echo > 20070618_00806.bak

c:\Users\Jon\Test>echo > 2007081700806.bak

c:\Users\Jon\Test>dir 200810*
 Volume in drive C is OS
 Volume Serial Number is B860-7E20

 Directory of c:\Users\Jon\Test

File Not Found

和C#app:

using System;
using System.IO;

class Test
{
    static void Main()
    {
        foreach (var file in new DirectoryInfo(".").GetFiles("200810*"))
        {
            Console.WriteLine(file);
        }
    }
}

(这不会打印任何结果。)

也许在某处有一些操作系统设置有所不同......你使用哪种操作系统? (我在32位Vista上。)

答案 3 :(得分:1)

GetFiles将搜索长文件名和短文件名...它不是以某种方式匹配短文件名吗?