使用 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
轻松添加新文件类型
如何检查包含(.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