Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
751 views
in Technique[技术] by (71.8m points)

c# - 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...