C#创建目录并设置权限

6
我正在尝试使用以下代码,以允许所有用户能够修改文件夹:
class Program
{
    private const string FileName = "test.txt";
    private static readonly string FilePath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\TEST\\" + FileName;
    private static readonly string UserName = Environment.UserDomainName;

    static void Main()
    {
        DirectorySecurity securityRules = new DirectorySecurity();

        string dirPath = Path.GetDirectoryName(FilePath);

        securityRules.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.Modify, AccessControlType.Allow));

        if (dirPath == null) throw new InvalidOperationException("Failure to save local security settings");

        if (!Directory.Exists(dirPath)) Directory.CreateDirectory(dirPath, securityRules);

        File.WriteAllText(FilePath, "Test test!");
    }
}

运行代码后,用户已添加到文件夹中,但未分配任何权限。所有读取、写入、执行等复选框都未被选中,除了特殊权限。如何为所有用户添加具有修改权限的文件夹?
1个回答

15
你可以使用 Directory.SetAccessControl() 方法。
示例:
DirectoryInfo directory = new DirectoryInfo(@"C:\my\directory");
DirectorySecurity security = directory.GetAccessControl();

security.AddAccessRule(new FileSystemAccessRule(@"MYDOMAIN\JohnDoe", 
                        FileSystemRights.Modify, 
                        AccessControlType.Deny));

directory.SetAccessControl(security);   

更多细节请参考MSDN


它能够工作,但如果我想让用户只能读取和执行,那么我将代码中的“FileSystemRights.Modify”更改为“FileSystemRights.ReadAndExecute”,但它仍然给予用户修改访问权限。我该如何解决这个问题?谢谢。 - Yode Zage
你尝试过这个吗:security.AddAccessRule(new FileSystemAccessRule(@"MYDOMAIN\JohnDoe", FileSystemRights.Modify, AccessControlType.Deny)); - fabriciorissetto
是的,我试过了。我在第22行的第一段代码中尝试了“securityRules.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.Modify, AccessControlType.Allow));”,但它并没有起作用。然而,我想知道当我调用“Directory.CreateDirectory(dirPath);”时,默认的访问规则是什么?是否对所有用户进行修改? - Yode Zage
确保Windows没有欺骗您。我在这里测试了将权限“修改”设置为“拒绝”对于我的用户,我注意到我不能再删除文件夹了,但是正如您在这张图片http://postimg.org/image/qsg5rl2xn/中所看到的那样,选项就像您说的那样(只有“特殊权限”被选中)。请查看“高级”选项以查看高级安全配置。 - fabriciorissetto
1
是的,窗口在欺骗我。当我点击“高级”时,它显示“拒绝”。非常感谢您的帮助! - Yode Zage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接