0

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

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

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

我用一个简单的程序进行了测试,它的行为不像文档中所说的那样,它只在非常罕见的情况下表现得像这样。

使用此代码:

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

我有这个结果:

在此处输入图像描述

你对这种行为有什么解释吗?

4

2 回答 2

5

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

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

如您所见,当我们在 windows 中搜索时,它给出的结果与您的代码给出的结果相同:

在此处输入图像描述

由于GetFiles以这种方式运行的原因,请查看此处,您可能还想查看这篇文章

于 2017-02-23T15:20:11.420 回答
1

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

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

GetFiles 具有不同的行为,无论是否启用该设置。

于 2017-02-23T15:48:54.753 回答