替代SetNamedSecurityInfo以强制文件刷新其可继承的权限

时间:2010-02-18 16:23:25

标签: c# acl file-permissions

我遇到问题,我们在temp中创建一个文件,然后移动到我们的应用程序目录,我们发现它的新父文件夹中有一个moved file does not inherit permissions

我知道我可以使用File.Copy(因为创建新文件会继承权限),但出于性能原因,我们不想这样做。

上面引用的网站建议使用SetNamedSecurityInfo,我可以使用PInvoke approach访问该网站。但是我认为可能有一些方法可以使用核心.NET API实现这一点,例如新的FileInfo(“C:\ Test.txt”)。GetAccessControl()如上面的文章现在已经有四年了。

有没有更好的方法来“刷新”文件权限以匹配其父文件夹的权限?

1 个答案:

答案 0 :(得分:1)

经过一些测试,这是我要使用的代码:

FileInfo fi = new FileInfo(myTargetFile);
var acl = fi.GetAccessControl();
var rules = acl.GetAccessRules(true, true, typeof(SecurityIdentifier));

//Remove all existing permissions on the file
foreach (var rule in rules.Cast<FileSystemAccessRule>())
{
  acl.RemoveAccessRule(rule);
}

//Allow inherited permissions on the file
acl.SetAccessRuleProtection(false, false);
fi.SetAccessControl(acl);