代码之家  ›  专栏  ›  技术社区  ›  MattH

替代setNamedSecurityInfo强制文件刷新其可继承权限

  •  1
  • MattH  · 技术社区  · 15 年前

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

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

    上面引用的站点建议使用setnamedsecurityinfo,我可以使用 PInvoke approach . 然而,我认为使用core.net API可能会有一些方法来实现这一点,比如新的fileinfo(“c:\test.txt”).getaccesscontrol(),因为上面的文章已经四年了。

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   MattH    15 年前

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

    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);