C# 使用Directory.GetFiles作为检查某些文件是否在目录中的条件,c脚本

C# 使用Directory.GetFiles作为检查某些文件是否在目录中的条件,c脚本,c#,validation,directory,path,getfiles,C#,Validation,Directory,Path,Getfiles,如何检查包含.jpg、.jpeg、.png和.pdf文件格式的目录中的所有文件,然后仅在存在这些文件的情况下将文件名存储在变量中?我尝试使用此代码,但它不起作用。我之所以说它不起作用,是因为我放进去的过程没有启动。我的代码有问题吗?请给我点化一下,或者带我走正确的路。感谢您的帮助 if(Directory.GetFiles(directory).All(x=> string.Compare(Path.GetExtension(x),"*.pdf", StringComparison.Cur

如何检查包含.jpg、.jpeg、.png和.pdf文件格式的目录中的所有文件,然后仅在存在这些文件的情况下将文件名存储在变量中?我尝试使用此代码,但它不起作用。我之所以说它不起作用,是因为我放进去的过程没有启动。我的代码有问题吗?请给我点化一下,或者带我走正确的路。感谢您的帮助

if(Directory.GetFiles(directory).All(x=> string.Compare(Path.GetExtension(x),"*.pdf", StringComparison.CurrentCultureIgnoreCase) == 0) && Directory.GetFiles(directory).All(x=> string.Compare(Path.GetExtension(x),"*.jpg", StringComparison.CurrentCultureIgnoreCase))
{
    // insert process here of getting the file names that has the extension of .jpg,.jpeg,.png and .pdf
}

您正在使用的字符串比较方法的重载不接受要比较的模式,而是接受要比较第一个的第二个字符串。这意味着,如果目录中有一个fooBar.png文件,您最终会将它的扩展名so.png与*.png进行比较,这是不同的

您还说过要获取以多个指定扩展名之一结尾的所有文件名,但您使用的是.all…,它仅在枚举中的所有项与给定表达式匹配时才返回true。所以

Allx=>string.ComparePath.GetExtensionx,*.pdf,StringComparation.CurrentCultureIgnoreCase==0 仅当目录中的所有文件都是pdf文件时才会返回true

这也不一定是一个问题,但代码中有一些次优的东西:从磁盘多次读取相同的内容,正如所说的,是次优的

也就是说,下面是一些更新的代码来解决您的问题:

var acceptedFileTypes=新列表 { .png, .pdf, ... }; //获取指定目录中的所有文件 var filesInDirectory=Directory.GetFilesdirectory; //仅选择具有可接受文件扩展名的文件 //显式类型,以便更好地理解 List supportedFiles=filesInDirectory.Where file=>acceptedFileTypes.ContainsPath.GetExtensionfile 托利斯特先生; //对支持的文件执行一些操作 //例如,将它们打印到控制台: supportedFiles中的foreach var文件 { Console.WriteLine$找到支持的文件:{file}; } 你可以用它做任何你想做的事情,把它放在一个方法中,交换一个静态成员的acceptedFileTypes,或者把它放在它自己的静态类中,等等。
此外,您还可以通过添加列表轻松添加新的文件类型

它不起作用为什么不起作用?它是否抛出异常,如果是,是哪一个?是否静默失败,如果是,是否有日志输出?它找不到任何文件吗?请回答您的问题,包括为什么它不起作用。据说,我看到您使用了string.Compare方法的重载,该方法不接受正则表达式,而是使用两个字符串进行比较。因此,您将fooBar.png So.png的扩展名与*.png进行比较,这显然不是相同的。不清楚如果指定扩展名的目录中有所有或任何文件,是否要处理文件?我要处理包含所述扩展名的所有文件@MindSwipe我在我的另一个代码目录.GetFiles中有一个zip文件,并且使用了*.zip,所以我认为使用*.jpg也可以,是的,Directory.GetFiles…,*.zip工作,因为过载。无论是谁,string.Compare都没有类似的重载。我现在正在写一个答案,我现在会检查这个代码,非常感谢你的帮助和解释!一旦完成,我会回复你的。它工作得很好,但是我有一些小改动,希望你能把它删掉。它应该是Path.GetExtension,在Console.WriteLine中,我是这样做的。WriteLine文件名:{0},文件我刚刚编辑了这个问题以使用Path.GetExtension。但是我不会编辑Console.WriteLine来使用格式化,因为$and{…}会被编译为string.Format。。。虽然它在C<6和.NET Framework<4.5中不可用,但它只是语法上的糖分,没有任何区别