使用UNC路径检索文件夹's组和用户

本文关键字:用户 UNC 路径 检索 文件夹 使用 | 更新日期: 2023-09-27 18:14:29

我已经设置了一个任务,允许用户输入UNC路径(即''bla.org.dom'temp'test'lowest),并从最低的文件夹到最高的文件夹,构建一个对每个文件夹具有读/写权限的组和用户列表。我花了相当多的时间研究activedirectory服务,却一无所获。虽然我对c#有相当的把握,但activedirectory和ldap似乎超出了我的头脑。欢迎大家提出阅读材料的建议。

由于这是我的第一个帖子,欢迎对我的问题格式提出任何批评!

编辑:经过使用目录安全方法和AccessRules的进一步研究,我已经达到了可以递归调用帐户名称列表的阶段。这是接近我需要的,但我发现它更难实现它调用unc路径。

使用UNC路径检索文件夹's组和用户

答案本身就在DirectoryInfo和DirectorySecurity名称空间中。使用前面从checking-for-directory-and-file-write-permissions-in-net中提供的信息,我设法创建了一个递归调用方法,该方法生成对文件夹进行读/写操作的用户/组列表,从最上面的目录开始,一直到最下面的目录。

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",然后将逐文件夹处理,填充我用来显示数据的表单。