搜索所有子目录中的某些文件,跳过一些文件夹

nik*_*nik 2 c# linq

我希望获得具有特定扩展名但跳过某些文件夹的所有文件的所有路径.我使用此代码工作正常,但不排除指定的文件夹.

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>();
    }
}
Run Code Online (Sandbox Code Playgroud)

但根据我对其他问题的研究,这正是我应该做的.我哪里出错了?

用法是:

var enumerable = EnumerateFiles(@"C:\", "*.jpg", SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

我猜你想exlude Program Files Windows,所以使用&&的替代||.

.Where(y => !y.Contains("Program Files") && !y.Contains("Windows"))
Run Code Online (Sandbox Code Playgroud)