我正在处理一个处理大量文件(超过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);
}
我有这个结果:
您对此行为有任何解释吗?
答案 0 :(得分:4)
如果您使用 .pdf 在目录中搜索,这是GetFiles方法的预期行为,在Windows上也是如此将选择扩展名为 .pdfa 或 * .pdfaaa 的文件,您需要自己设置Where()
:
Directory.GetFiles(directory, "*.pdf").Where(item => item.EndsWith(".pdf"));
正如您所看到的那样,当我们在Windows中搜索时,它会给出与您的代码相同的结果:
为什么 GetFiles 的行为方式please have a look here,您可能还想查看this post as well
答案 1 :(得分:0)
正如@luaan和@ hans-passant所解释的那样(非常感谢!)我没有找到扩展名为.pdfa的文件,因为我的硬盘驱动器上禁用了8.3格式。
在启用8.3格式的硬盘驱动器上,该方法的行为与文档中所述的相同。
GetFiles在启用或不启用设置时具有不同的行为。