【问题标题】:Excluding a directory with specific pattern while using dir.GetDirectories使用 dir.GetDirectories 时排除具有特定模式的目录
【发布时间】:2018-07-03 05:09:18
【问题描述】:

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

DirectoryInfo[] dirs = dir.GetDirectories();

我在某处读到 GetDirectories 的 searchPattern 参数只能支持?和 * 通配符,不支持任何其他正则表达式。

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

【问题讨论】:

  • 嗨,什么是 .svn ?隐藏文件夹?那么这与stackoverflow.com/questions/2418270/… 重复
  • 谢谢。在这些示例中,我们有过滤文件的逻辑。尽管我们可以对 getDirectories 使用类似的逻辑,但我想要一个简单的解决方案来创建一个包含除“.svn”之外的所有文件夹的 DirectoryInfo[] 数组。
  • .svn 就是一个例子。我可能也需要它用于常规文件夹...
  • 试试DirectoryInfo[] dirs = dir.GetDirectories().Where(x => x.Extension != ".svn").ToArray();

标签: c# c#-4.0


【解决方案1】:

您可以在 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】:

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

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

    【讨论】:

      【解决方案3】:

      回答: DirectoryInfo[] dirs = dir.GetDirectories().Where(x => x.Name != ".svn").ToArray(); (并且它需要 System.Linq; 命名空间)

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

      【讨论】:

        猜你喜欢
        • 2015-06-29
        • 2021-06-10
        • 2016-12-23
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多