我要设置对文件的完全访问权限(fileName
)。我找到了一个代码示例:
var security = IO.File.GetAccessControl(fileName);
security.AddAccessRule(new Security.AccessControl.FileSystemAccessRule(
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
Security.AccessControl.FileSystemRights.FullControl,
Security.AccessControl.AccessControlType.Allow));
IO.File.SetAccessControl(fileName, security);
它运行良好,但我不明白为什么要将filename
传递给SetAccessControl
方法(我已经在第一行中提供了它)?我对代码进行了更改,并看到这也有效:
var security = IO.File.GetAccessControl(anotherFileName);
security.AddAccessRule(new Security.AccessControl.FileSystemAccessRule(
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
Security.AccessControl.FileSystemRights.FullControl,
Security.AccessControl.AccessControlType.Allow));
IO.File.SetAccessControl(fileName, security);
那么anotherFileName
在这里有什么用呢?
GetAccessControl
将获得FileSecurity
。
从 MSDN:
表示文件的访问控制和审核安全性。[...]此类将访问和审核权限表示为一组规则。
FileSecurity
不依赖于特定文件,因此您可以对多个文件使用一个FileSecurity
来设置相同的访问和审核权限。
这就是您需要指定文件名的原因。
另一种方法是使用 FileInfo
类。
var fileInfo = new FileInfo(filename);
var security = fileInfo.GetAccessControl();
// [...]
fileInfo.SetAccessControl(security);
MSDN 的构造函数:
FileSecurity()
将创建一个空的FileSecurity
对象。
FileSecurity(String, AccessControlSections)
使用AccessControlSections
枚举的指定值从指定文件创建空FileSecurity
对象。
安全信息 (ACL) 不绑定到对象,因此您可以获取一个文件的当前值并应用于任何其他文件。
这与string name = person.Name
完全相同 - name
不绑定于person
,只是与一个的某些属性相关联。