如何在使用Directory.GetDirectories时排除文件夹
本文关键字:GetDirectories 排除 文件夹 Directory | 更新日期: 2023-09-27 18:18:00
我想返回'SomeFolder'目录中所有子目录的列表,不包括 'Admin'和'Templates'目录。
我有以下文件夹结构(简化):
C:'inetpub'wwwroot'MyWebsite'SomeFolder'RandomString
C:'inetpub'wwwroot'MyWebsite'SomeFolder'RandomString
C:'inetpub'wwwroot'MyWebsite'SomeFolder'RandomString
C:'inetpub'wwwroot'MyWebsite'SomeFolder'Admin
C:'inetpub'wwwroot'MyWebsite'SomeFolder'Templates
'SomeFolder'可以包含不同数量的'RandomString'文件夹(从~10到~100)。
这是我尝试过的:
var dirs = Directory.GetDirectories(Server.MapPath(".."))
.Where(s => !s.EndsWith("Admin") || !s.EndsWith("Templates"));
foreach (string dir in dirs)
{
lit.Text += Environment.NewLine + dir;
}
这将返回未过滤掉'Admin'和'Templates'的完整文件夹列表(如上所示)。
有趣的是,如果我将LINQ.Where
子句更改为包括,而不是排除, 'Admin'和'Templates',它会工作,这意味着它只返回'Admin'和'Templates'的路径。.Where(s => s.EndsWith("Admin") || s.EndsWith("Templates"));
如果LINQ不是解决方案,是否有任何方法使用GetDirectories SearchPattern来过滤掉目录?
你可以这样做:
//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));
(A || B)的反义词是(!一个,,B),所以在你的代码中应该是&&,而不是||…