如何在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.ObjectInherit
和 PropagationFlags.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#中授予文件夹权限?的主要内容,如果未能解决你的问题,请参考以下文章