我要为文件(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
在这里的用途是什么?
答案 0 :(得分:2)
GetAccessControl
将获得FileSecurity
。
来自MSDN:
表示文件的访问控制和审核安全性。 [...]此类将访问权限和审计权限表示为一组规则。
FileSecurity
不依赖于特定文件,因此您可以在多个文件上使用一个FileSecurity
来设置相同的访问权限和审核权限。
这就是你需要指定文件名的原因。
另一种方法是使用FileInfo
类。
var fileInfo = new FileInfo(filename);
var security = fileInfo.GetAccessControl();
// [...]
fileInfo.SetAccessControl(security);
来自MSDN的constructors:
FileSecurity()
将创建一个空的FileSecurity
对象。
FileSecurity(String, AccessControlSections)
使用FileSecurity
枚举的指定值从指定文件创建空AccessControlSections
对象。
答案 1 :(得分:0)
安全信息(ACL)与对象无关,因此您可以获取一个文件的当前值并应用于任何其他文件。
这与string name = person.Name
完全相同 - name
与person
无关,只是一个属性。