1

首先让我说我的 C# 非常糟糕。我正在为我的工作开发一个工具(我希望其他人也能发现它很有用),它将根据 SMB 共享中提供的文件路径在 AD 中创建安全组,为目录分配适当的权限(文件路径中的最后一个文件夹),然后将组列表权限授予其上方的每个父文件夹,以便用户可以导航到该目录,而不会看到他们没有被授予访问权限的其他目录(我们在文件服务器上使用基于访问权限的枚举,所以他们不会看到任何其他文件夹,除非它们已经被另一个安全组访问,等等...)。我有前两个部分工作。所以,

我认为我需要做的基本上是创建一个列表,其中将包含目录的每个父文件夹的路径,然后使用 foreach 循环为每个目录的 ACL 分配列表权限。因此,使用上面的示例,列表将包括以下内容:

\\文件服务器\一些

\\文件服务器\一些\示例

父文件夹的数量可能会有所不同,因此列表中的项目数量也可能会有所不同。

第一个问题:制作一个列表然后使用 foreach 循环是一种好方法,还是有更好的方法?

第二个问题:我该怎么做?到目前为止,我了解到处理反斜杠很棘手,因为它们是转义字符。在将字符串添加到列表之前,我基本上坚持修剪字符串以删除最后一个反斜杠和字符串后面的字符,以及如何递归地执行此操作,直到没有任何东西可以修剪。

谢谢!

4

1 回答 1

1

您可以执行以下操作

class DirectoryHelper
{
    public List<string> GetDirectories(string path)
    {
        List<string> list = new List<string>();

        if (!string.IsNullOrEmpty(path))
        {
            if (path.Last() != '\\')
            {
                path += "\\";
            }

            EnumerateDictories(list, path);
        }

        return list;
    }

    private void EnumerateDictories(IList<string> results, string path)
    {
        var parent = Directory.GetParent(path);

        if (parent != null)
        {
            EnumerateDictories(results, parent.FullName);

            results.Add(parent.FullName);
        }
    }
}

这被称为:

DirectoryHelper helper = new DirectoryHelper();
var dir = helper.GetDirectories(@"C:\Temp\Folder1\");

我相信你必须添加一些代码来防止无效的目录字符串,但你可能明白了。

-update- 编辑了一些反斜杠处理,因此您不必关心它。

于 2013-02-07T06:52:59.110 回答