如何在c#中授予文件夹权限?

Posted

技术标签:

【中文标题】如何在c#中授予文件夹权限?【英文标题】:How to give permissions for folders in c#? 【发布时间】:2011-08-31 00:34:52 【问题描述】:

我需要使用 c# 为“Temporary ASP.NET Files”文件夹授予写入权限...并且我使用此代码授予它访问权限

DirectoryInfo d1 = new DirectoryInfo(Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "Temporary ASP.NET Files"));
DirectorySecurity md1 = d1.GetAccessControl();


string user_1 = fa.TextGuestDomain + "\\" + fa.TextGuestUser;
md1.AddAccessRule(new FileSystemAccessRule(user_1, FileSystemRights.FullControl,InheritanceFlags.ObjectInherit,PropagationFlags.InheritOnly, AccessControlType.Allow));

d1.SetAccessControl(md1);

当我在实现代码后检查文件夹“Temporary ASP.NET Files”的安全属性时,它没有检查“写入”权限复选框,而是检查了“特殊权限”复选框...我注意到,即使我将访问权限从写入更改为完全控制或读取,它也会检查“特殊权限”......

这不是问题:),问题是它没有授予我授予它的正确访问权限...当我授予它写入权限时,它的行为不像我授予它写入权限。不知道为什么!!我做错了吗??

注意: 当我以手动方式工作时,当使用编码方式时。它不工作......

我希望你能帮助我...

非常感谢

【问题讨论】:

【参考方案1】:

我知道你的痛苦——文件系统 ACL 修改起来很痛苦,即使它看起来有效,在某些情况下它也可能会中断。幸运的是,在您的情况下,有一个简单的解决方案。

问题在于PropagationFlags.InheritOnly。这意味着此权限应用于继承权限的项目 - 例如您仅授予此目录中的文件而不是任何子目录中的文件

要授予“通常”继承的目录权限(即传播到子目录和所有文件),请为 InheritanceFlags 和 PropagationFlags 使用以下值: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInheritPropagationFlags.None

【讨论】:

【参考方案2】:
private static void GrantAccess(string file)

    bool exists = System.IO.Directory.Exists(file);
    if (!exists)
    
        DirectoryInfo di = System.IO.Directory.CreateDirectory(file);
        Console.WriteLine("The Folder is created Sucessfully");
    
    else
    
        Console.WriteLine("The Folder already exists");
    
    DirectoryInfo dInfo = new DirectoryInfo(file);
    DirectorySecurity dSecurity = dInfo.GetAccessControl();
    dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
    dInfo.SetAccessControl(dSecurity);
   

上面的代码将文件夹的访问权限设置为完全控制/读写每个用户(每个人)。

【讨论】:

完全按照说的那样工作。每个人都可以完全控制 对我不起作用。我想在C:\Program Files\Unity\Hub\Editor\2019.4.20f1\Editor 中添加一些库,并使用相同的脚本修改不创建目录。我得到Error: System.UnauthorizedAccessException: Attempted to perform an unauthorized operation. at System.Security.AccessControl.NativeObjectSecurity.RaiseExceptionOnFailure (System.Int32 errorCode, System.String name, System.Runtime.InteropServices.SafeHandle handle, System.Object context) [0x00024] @blongho 也许您当前的进程没有对该位置的访问权限.. 尝试使用管理员权限运行它

以上是关于如何在c#中授予文件夹权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中为 IIS 用户授予文件夹权限?

如何使用c#在winforms中为每个用户授予权限

如何从 C# 授予 Windows 10 中 Pcap 库的权限?

如何在docker容器文件夹中授予文件夹权限

如何授予 Kivy android 脚本的权限?

如何在 C 中授予完整文件权限