Reputation: 1784
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
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