nik
nik

Reputation: 1784

searching all subdirectories for certain files, skipping some folders

I want to get all paths to all files with a certain extension but skipping certain folders. I use this code which works fine but does not exclude the specified folders.

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

But based on my research of other questions this is exactly what I should be doing. Where am I going wrong please?

Usage would be:

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

Upvotes: 2

Views: 104

Answers (1)

Tim Schmelter
Tim Schmelter

Reputation: 460268

I guess that you want to exlude Program Files and Windows, so use && instead of ||.

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

Upvotes: 5

Related Questions