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

Using Directory.GetFiles as a condition to check if certain files are inside the directory , c# scripts

如何检查包含(.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(...),只有 return 如果 才为真枚举中的所有 项都匹配给定的表达式。所以

All(x=> string.Compare(Path.GetExtension(x),"*.pdf", StringComparison.CurrentCultureIgnoreCase) == 0)

仅当目录中的所有文件都是 pdf 文件时才 return 为真。

这也不一定是问题,但您的代码中有一些次优的地方:您多次从磁盘读取相同的内容,如前所述,次优。

也就是说,这里有一些更新的代码可以解决您的问题:

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 交换静态成员,或者把它放在它自己的静态 class 中等等。
您也可以通过附加 List

轻松添加新文件类型