如何检查包含 (.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",你最终会将其扩展名(所以".png"(与"*.png"进行比较,这是不一样的。
您还说要获取以多个指定扩展名之一结尾的所有文件名,但是您的使用.All(...)
,仅当枚举中的所有项目都与给定表达式匹配时,才返回 true。所以
All(x=> string.Compare(Path.GetExtension(x),"*.pdf", StringComparison.CurrentCultureIgnoreCase) == 0)
仅当目录中的所有文件都是 PDF 文件时,才会返回 true。
也不一定有问题,但代码中有一些次优的东西:你多次从磁盘读取相同的内容,如前所述,次优。
话虽如此,这里有一些更新的代码来解决您的问题:
var acceptedFileTypes = new List<string>
{
".png",
".pdf",
...
};
// Get all files in the specified directory
var filesInDirectory = Directory.GetFiles(directory);
// Only select those with accepted file extensions
// Explicit type for better understanding
List<string> supportedFiles = filesInDirectory.Where(
file => acceptedFileTypes.Contains(Path.GetExtension(file))
).ToList();
// Do something with the supportedFiles
// e.g print them to the console:
foreach (var file in supportedFiles)
{
Console.WriteLine($"Found supported file: {file}");
}
你可以用它做任何你想做的事情,把它放在一个方法中,acceptedFileTypes
交换一个静态成员,或者把它放在它自己的静态类中等等。你也可以通过附加List来轻松添加新的文件类型。