Pat*_*eVB 1 .net c# system.io.directory base-class-library
我正在处理一个批处理程序,该程序处理大量文件(超过5万个文件),并且该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);
}
Run Code Online (Sandbox Code Playgroud)
我有这个结果:
您对此行为有任何解释吗?
这是GetFiles方法的预期行为,在Windows上也是如此,如果您使用.pdf在目录中搜索,它将选择带有扩展名的文件.pdfa或* .pdfaaa,您需要将Where()自己像这样:
Directory.GetFiles(directory, "*.pdf").Where(item => item.EndsWith(".pdf"));
Run Code Online (Sandbox Code Playgroud)
如您所见,当我们在Windows中搜索时,其结果与您的代码所提供的结果相同:
由于GetFiles为何采用这种方式,请在此处查看,您也可能希望查看此帖子。