C#中SetAccessControl方法调用报错,求助正确使用方式
解决DirectoryInfo.SetAccessControl的参数错误问题
你报错的核心原因是DirectoryInfo.SetAccessControl方法只接受一个DirectorySecurity类型的参数,不需要重复传入路径——因为你已经通过DirectoryInfo实例绑定了目标文件夹路径。
正确的使用流程
- 先获取目标文件夹的
DirectorySecurity对象(这部分你已经写对了) - 修改该对象的权限规则(实现文件夹锁定的核心步骤)
- 调用
SetAccessControl传入修改后的DirectorySecurity对象
完整示例代码
比如要实现锁定文件夹(拒绝当前用户的写入/删除/修改权限),可以这样写:
string path = "你的文件夹路径"; System.IO.DirectoryInfo directoryInfo = new DirectoryInfo(path); // 获取当前文件夹的权限设置 System.Security.AccessControl.DirectorySecurity dirSecurity = directoryInfo.GetAccessControl(); // 添加拒绝规则:拒绝当前用户的写入、删除、修改权限 var currentUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name; FileSystemAccessRule denyRule = new FileSystemAccessRule( currentUser, FileSystemRights.Write | FileSystemRights.Delete | FileSystemRights.Modify, AccessControlType.Deny ); dirSecurity.AddAccessRule(denyRule); // 应用修改后的权限设置 directoryInfo.SetAccessControl(dirSecurity);
关键说明
SetAccessControl无返回值,不需要用变量接收- 锁定文件夹时,根据需求调整
FileSystemRights的枚举值,比如要完全禁止访问可以用FileSystemRights.FullControl - 运行程序需要管理员权限,否则会抛出
UnauthorizedAccessException异常 - 如果需要解锁,只需要移除对应的拒绝规则,再调用
SetAccessControl即可
内容的提问来源于stack exchange,提问作者Jesse Barney
相关产品推荐
相关产品推荐

