C#程序运行时经常遇到文件或文件夹权限问题,导致程序运行失败。为了解决这个头疼的问题,我们通常要读取和设置文件、文件夹权限。
读取文件、文件夹权限
/// <summary>/// 读取文件、文件夹权限/// </summary>/// <param name="path"></param>private void ReadPathRule(string path){DirectoryInfo di = new DirectoryInfo(path);DirectorySecurity ds = di.GetAccessControl(AccessControlSections.All);foreach (FileSystemAccessRule rule in ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))){Console.WriteLine("----------------------------------");Console.WriteLine(rule.IdentityReference.Value);if ((rule.FileSystemRights & FileSystemRights.Read) != 0)Console.WriteLine(rule.FileSystemRights.ToString());}}
设置文件权限
/// <summary>/// 为文件添加users,everyone用户组的完全控制权限/// </summary>/// <param name="filePath"></param>static void AddSecurityControll2File(string filePath){//获取文件信息FileInfo fileInfo = new FileInfo(filePath);//获得该文件的访问权限System.Security.AccessControl.FileSecurity fileSecurity = fileInfo.GetAccessControl();//添加ereryone用户组的访问权限规则 完全控制权限fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));//添加Users用户组的访问权限规则 完全控制权限fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));//设置访问权限fileInfo.SetAccessControl(fileSecurity);}
设置文件夹权限
/// <summary>///为文件夹添加users,everyone用户组的完全控制权限/// </summary>/// <param name="dirPath"></param>static void AddSecurityControll2Folder(string dirPath){//获取文件夹信息DirectoryInfo dir = new DirectoryInfo(dirPath);//获得该文件夹的所有访问权限System.Security.AccessControl.DirectorySecurity dirSecurity = dir.GetAccessControl(AccessControlSections.All);//设定文件ACL继承InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;//添加ereryone用户组的访问权限规则 完全控制权限FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);//添加Users用户组的访问权限规则 完全控制权限FileSystemAccessRule usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);bool isModified = false;dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out isModified);dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out isModified);//设置访问权限dir.SetAccessControl(dirSecurity);}
注意:修改权限有时候需要程序有管理员权限,怎么以管理员身份运行程序,请参考:
C#/WPF 以管理员身份运行程序-CSDN博客
本文参考资料:
C#中修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限_c#修改文件权限-CSDN博客