0

我将设置文件的完全访问权限 ( 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这里有什么用呢?

4

2 回答 2

2

GetAccessControl会得到FileSecurity.

来自 MSDN:

表示文件的访问控制和审计安全性。[...] 此类将访问和审核权限表示为一组规则。

AFileSecurity不依赖于特定文件,因此您可以FileSecurity对多个文件使用一个来设置相同的访问和审核权限。

这就是您需要指定文件名的原因。

另一种方法是使用FileInfo该类。

var fileInfo = new FileInfo(filename);
var security = fileInfo.GetAccessControl();
// [...]
fileInfo.SetAccessControl(security);

来自 MSDN的构造函数:

FileSecurity()

将创建一个空FileSecurity对象。

FileSecurity(String, AccessControlSections)

使用枚举FileSecurity的指定值从指定文件创建一个空对象。AccessControlSections

于 2013-10-24T16:49:29.283 回答
0

安全信息 (ACL) 不与对象绑定,因此您可以获取一个文件的当前值并应用于任何其他文件。

string name = person.Name这与-name不与 a 绑定person,只是与 one 的某些属性完全相同。

于 2013-10-24T16:52:02.957 回答