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

列出与定义的路径模式匹配的所有文件夹

  •  3
  • Dexter  · 技术社区  · 15 年前

    \Test\[a-z]+\Project[0-9]{3}

    遍历树以查找所有匹配文件夹的最有效方法是什么?有没有比使用DirectoryInfo和di.GetDirectories()进行简单的递归深度优先搜索更好的方法,例如:

    private void TraverseSubFolder(DirectoryInfo folder)
    {
        if (filter.IsMatch(folder.FullName)) {
           DoStuff(folder);
        }
    
        DirectoryInfo[] subFolders = folder.GetDirectories();
        foreach (DirectoryInfo sf in subFolders)
        {
            TraverseSubFolder(sf);
        }
    }
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   Pierre-Alain Vigeant    15 年前

    您可以使用Linq进行过滤

    Regex regex = new Regex("your regex");
    var directories = Directory.GetDirectories("c:\\", null, SearchOption.AllDirectories).Where(directory => regex.IsMatch(directory));
    

    Where 在返回所有文件夹后发生。

    编辑

    我不认为您可以不使用递归函数,因为检查UnauthorizedAccessException。

    private static void Traverse(List<string> folders, string rootFolder, Regex filter)
    {
        try
        {
            // Test for UnauthorizedAccessException
            new FileIOPermission(FileIOPermissionAccess.PathDiscovery, rootFolder).Demand();
    
            Array.ForEach(Directory.GetDirectories(rootFolder),
                (directory) =>
                {
                    if (filter.IsMatch(directory))
                    {
                        folders.Add(directory);
    
                        Traverse(folders, directory, filter);
                    }
                });
        }
        catch 
        {
            // Ignore folder that we don't have access to
        }
    }
    
    // Usage example
    List<string> folders = new List<string>();
    Regex regex = new Regex("^.+$");
    Traverse(folders, "e:\\projects", regex);
    
        2
  •  0
  •   Nestor    15 年前

    Directory.GetDirectories(..,..,SearchOption.AllDirectories)

    推荐文章