Directory.GetFiles使用SearchPattern返回意外结果

时间:2017-02-23 15:11:16

标签: c# .net base-class-library system.io.directory

我正在处理一个处理大量文件(超过50 000个文件)的批处理程序,并且我使用Directory.GetFiles方法面临奇怪的行为。

在此过程中,我移动与以下搜索模式“* .pdf”匹配的文件,并通过Directory.GetFiles方法获取文件: 我很惊讶地看到有时我移动了.pdfa文件。

所以我检查了doc,它清楚地说明如果搜索模式包含一个包含3个字母的扩展名,那么每个扩展名以扩展名开头的文件都将被返回。

我已经使用一个简单的程序进行了测试,并且它的行为与文档中的描述不同,它在非常罕见的情况下表现得像这样。

使用此代码:

static void Main(string[] args) {
    var directory = @"E:\Test\";
    var files = Directory.GetFiles(directory, "*.pdf");
    foreach(var file in files)
        Console.WriteLine(file);
}

我有这个结果:

enter image description here

您对此行为有任何解释吗?

2 个答案:

答案 0 :(得分:4)

如果您使用 .pdf 在目录中搜索,这是GetFiles方法的预期行为,在Windows上也是如此将选择扩展名为 .pdfa * .pdfaaa 的文件,您需要自己设置Where()

Directory.GetFiles(directory, "*.pdf").Where(item => item.EndsWith(".pdf"));

正如您所看到的那样,当我们在Windows中搜索时,它会给出与您的代码相同的结果:

enter image description here

为什么 GetFiles 的行为方式please have a look here,您可能还想查看this post as well

答案 1 :(得分:0)

正如@luaan和@ hans-passant所解释的那样(非常感谢!)我没有找到扩展名为.pdfa的文件,因为我的硬盘驱动器上禁用了8.3格式。

在启用8.3格式的硬盘驱动器上,该方法的行为与文档中所述的相同。

GetFiles在启用或不启用设置时具有不同的行为。