让我首先说我的C#非常糟糕。我正在为我的工作开发一个工具(我希望其他人也能发现它也很有用),它将根据来自SMB共享的提供文件路径在AD中创建安全组,为目录分配适当的权限(文件路径中的最后一个文件夹) ),然后将组列表权限授予它上面的每个父文件夹,以便用户可以导航到该目录,而不会看到他们没有被授予访问权限的其他目录(我们在文件服务器上使用基于访问的枚举,因此他们不会看到任何其他文件夹,除非他们已经有另一个安全组访问它们等...)。我有前两部分工作。因此,现在程序在AD中创建所需的安全组,并为它们分配所提供路径的目录(\ fileserver \ some \ example \ shareddirectory)的正确权限。
我认为我需要做的是基本上创建一个列表,其中包含该目录的每个父文件夹的路径,然后使用foreach循环为每个目录的ACL分配列表权限。因此,使用上面的示例,列表将包括以下内容:
\\文件服务器\一些
\\文件服务器\一些\示例
父文件夹的数量可能会有所不同,因此列表中的项目数也会有所不同。
第一个问题:正在制作一个列表,然后使用foreach循环这是一个很好的方法,还是有更好的方法?
第二个问题:我该怎么做?到目前为止,我已经了解到处理反斜杠很棘手,因为它们是转义字符。我基本上一直在修剪字符串以删除最后一个反斜杠和字符串后面的字符,然后将它添加到列表中,以及如何递归执行此操作,直到没有任何内容可以修剪。
谢谢!
答案 0 :(得分: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- 已编辑了一些反斜杠处理,因此您无需关心它。