答案本身就在 DirectoryInfo 和 DirectorySecurity 命名空间中。使用之前从检查目录和文件写入权限提供的信息,我设法创建了一个递归调用方法,该方法生成对文件夹具有读/写权限的用户/组的列表,开始在顶部并向下工作到最低目录。
string dir = "";
if (input.Text.Contains(@"\\"))
{
dir += @"\\";
}
string[] folders = input.Text.Split(new char[] { '\\', '/' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string folder in folders)
{
if (dir.Contains(@"\\") && folder == folders[0])
{
dir += folder + @"\";
}
else
{
dir += folder + @"\";
ResultGroup newbox = new ResultGroup(folder);
newbox.label1.Click += (x, y) =>
{
splitContainer1.Panel2Collapsed = false;
listBox1.Items.Add(newbox.label1.Text);
};
flowLayoutPanel1.Controls.Add(newbox);
DirectoryInfo di = new DirectoryInfo(dir);
DirectorySecurity ds = di.GetAccessControl();
foreach (AccessRule rule in ds.GetAccessRules(true, true, typeof(NTAccount)))
{
newbox.listBox1.Items.Add(string.Format("{0}", rule.IdentityReference.Value));
}
}
}
这允许用户输入本地路径,例如“C:\Temp\Test Folder”或 UNC 路径“\Server\Share\Temp\Network Test Folder”,然后将逐个文件夹处理,填充表格 I我用来显示数据。