How to exclude folders when using Directory.GetDirectories

I want to return a list of all the subdirectories in the ‘SomeFolder’ directory excluding the ‘Admin’ and ‘Templates’ directories.

I have the following folder structure (simplified):

    C:inetpubwwwrootMyWebsiteSomeFolderRandomString
    C:inetpubwwwrootMyWebsiteSomeFolderRandomString
    C:inetpubwwwrootMyWebsiteSomeFolderRandomString
    C:inetpubwwwrootMyWebsiteSomeFolderAdmin 
    C:inetpubwwwrootMyWebsiteSomeFolderTemplates

‘SomeFolder’ can contain a varying number a ‘RandomString’ folders (anywhere from ~10 to ~100).

Here is what I have tried:

    var dirs = Directory.GetDirectories(Server.MapPath(".."))
    .Where(s => !s.EndsWith("Admin") || !s.EndsWith("Templates"));
    foreach (string dir in dirs)
    {
        lit.Text += Environment.NewLine + dir;
    }

This returns the full list of folders (shown above) without ‘Admin’ and ‘Templates’ filtered out.

Interestingly, if I change the LINQ .Where clause to include, instead of exclude, ‘Admin’ and ‘Templates’ it works, meaning it returns just the paths for ‘Admin’ and ‘Templates’.

.Where(s => s.EndsWith("Admin") || s.EndsWith("Templates"));

If LINQ is not the solution, is there any way to use the GetDirectories SearchPattern to filter out directories?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

the opposite of (A || B) is (!A && !B), so in your code it should be &&, not ||…

Method 2

You can do something like:

//list your excluded dirs
private List<string> _excludedDirectories= new List<string>() { "Admin", "Templates" };

//method to check
static bool isExcluded(List<string> exludedDirList, string target)
{
    return exludedDirList.Any(d => new DirectoryInfo(target).Name.Equals(d));
}

//then use this
var filteredDirs = Directory.GetDirectories(path).Where(d => !isExcluded(_excludedDirectories, d));


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x