我希望获得具有特定扩展名但跳过某些文件夹的所有文件的所有路径。我使用此代码工作正常,但不排除指定的文件夹。
public static IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOpt)
{
try
{
var dirFiles = Enumerable.Empty<string>();
if (searchOpt == SearchOption.AllDirectories)
{
dirFiles = Directory.EnumerateDirectories(path)
.Where(y => !y.Contains("Program Files") || !y.Contains("Windows"))
.SelectMany(x => EnumerateFiles(x, searchPattern, searchOpt));
}
return dirFiles.Concat(Directory.EnumerateFiles(path, searchPattern));
}
catch (UnauthorizedAccessException ex)
{
return Enumerable.Empty<string>();
}
}
但根据我对其他问题的研究,这正是我应该做的。我哪里出错了?
用法是:
var enumerable = EnumerateFiles(@"C:\", "*.jpg", SearchOption.AllDirectories);
答案 0 :(得分:5)
我想您要排除Program Files
和 Windows
,因此请使用&&
代替||
。
.Where(y => !y.Contains("Program Files") && !y.Contains("Windows"))