引入名称空间:
using System.Security.AccessControl;
using System.IO;
using System.IO;
设置 NTFS 权限:
DirectoryInfo di = new DirectoryInfo(path);
DirectorySecurity ds = di.GetAccessControl();
FileSystemAccessRule newAccessRule = new FileSystemAccessRule(identity, rights,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow);
ds.AddAccessRule(newAccessRule);
di.SetAccessControl(ds);
DirectorySecurity ds = di.GetAccessControl();
FileSystemAccessRule newAccessRule = new FileSystemAccessRule(identity, rights,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow);
ds.AddAccessRule(newAccessRule);
di.SetAccessControl(ds);
参数
- path 要设置 NTFS 权限的文件夹。
- identity 用户名。
- rights FileSystemRights 对象,值为 FileSystemRights.Read、FileSystemRights.Write、FileSystemRights.FullControl 等,或者用“|”将多个权限合起来。
InheritanceFlags 指定哪些接受权限继承
- InheritanceFlags.ContainerInherit 下级文件夹要继承权限。
- InheritanceFlags.None 下级文件夹、文件都不继承权限。
- InheritanceFlags.ObjectInherit 下级文件要继承权限。
上面提到“文件夹”、“文件”,更准确的说法应该是“容器”、“叶对象”,因为它不仅仅用于文件夹、文件,还可能用于其他地方,比如注册表权限。
PropagationFlags 如何传播权限
- PropagationFlags.InheritOnly 不对 path 作设置,只是传播到下级。
- PropagationFlags.None 不作设置,即既对 path 作设置,也传播到下级。
- PropagationFlags.NoPropagateInherit 只是对 path 作设置,不传播到下级。
PropagationFlags 只是在 InheritanceFlags 不为 None 时才有意义。也就是说 InheritanceFlags 指定了哪类对象可接受权限继承(传播),而 PropagationFlags 指明了如何传播这些权限。
说明
要给文件给文件夹设置权限,首先运行 C# 的帐户要具有足够的权限。