代码之家  ›  专栏  ›  技术社区  ›  giboo

使用dir.getdirectories时排除具有特定模式的目录

  •  1
  • giboo  · 技术社区  · 6 年前

    我想在使用getdirectories方法时排除文件夹名“.svn”

    DirectoryInfo[] dirs = dir.GetDirectories();
    

    我在某个地方读到getdirectories的searchpattern参数只能支持?和*通配符,不支持任何其他正则表达式。

    我想使用directoryinfo[]dirs填充除“.svn”文件夹以外的所有文件夹(例如)。这可能吗?如果没有,我还有其他的选择吗?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Metin Oğurlu    6 年前

    可以在getdirectories方法之后使用linq方法。

    using System.Linq;
    ...
    ...
    dir.GetDirectories().Where(d => !d.Name.StartsWith(".")).ToList(); //does not starts with dot.
    dir.GetDirectories().Where(d => d.Name != ".svn").ToList(); //does not equal .svn
    
        2
  •  0
  •   irkForce    6 年前

    是的,msdn说( https://msdn.microsoft.com/en-au/library/f3e2f6e5(v=vs.110).aspx )该搜索模式不支持regex。但是您可以在客户端通过regex过滤结果。例如:

    var di = new DirectoryInfo("c:\\");
    var dirInfos = di.GetDirectories();
    var filtered = from r in dirInfos where !Regex.IsMatch(r.FullName,"$*.svn") select r;
    
        3
  •  0
  •   giboo    6 年前

    回答: directoryinfo[]dirs=dir.getdirectories()。其中(x=>x.name!=“.svn”).toArray();(它需要system.linq;命名空间)

    假设以下条件仍然适用:
    https://meta.stackexchange.com/questions/1555/mark-a-comment-as-answer-to-a-question