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

时间:2015-04-15 08:09:02

标签: 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>();
    }
}

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

用法是:

var enumerable = EnumerateFiles(@"C:\", "*.jpg", SearchOption.AllDirectories);

1 个答案:

答案 0 :(得分:5)

我想您要排除Program Files Windows,因此请使用&&代替||

.Where(y => !y.Contains("Program Files") && !y.Contains("Windows"))