我遇到问题,我们在temp中创建一个文件,然后移动到我们的应用程序目录,我们发现它的新父文件夹中有一个moved file does not inherit permissions。
我知道我可以使用File.Copy(因为创建新文件会继承权限),但出于性能原因,我们不想这样做。
上面引用的网站建议使用SetNamedSecurityInfo,我可以使用PInvoke approach访问该网站。但是我认为可能有一些方法可以使用核心.NET API实现这一点,例如新的FileInfo(“C:\ Test.txt”)。GetAccessControl()如上面的文章现在已经有四年了。
有没有更好的方法来“刷新”文件权限以匹配其父文件夹的权限?
答案 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);