C#文件夹权限

时间:2018-04-10 08:38:34

标签: c# permissions

我需要拥有该文件夹及其子文件夹的所有权才能将其删除。手动过程对我很有用:

  1. 打开文件夹属性。
  2. 安全标签 - >高级 - >所有者变更 - >检查"替换子容器和对象的所有者"
  3. 出现消息框:您无权读取目录C:\ a4f31eae62bde1cb4d49834897 \ Sandbox的内容。是否要使用授予完全控制权限的目录权限替换目录权限? 如果按是,将替换所有权限。
  4. 按是
  5. 然后我就可以删除该文件夹。
  6. 但我有大约数百个文件夹(reason),所以我想以编程方式删除它们。

    我的代码取得了文件夹的所有权,但没有子文件夹的所有权。

    var identity = WindowsIdentity.GetCurrent().User;
    var dirInfo = new DirectoryInfo(dirPath);
    var dirSecurity = dirInfo.GetAccessControl();
    
    dirSecurity.SetOwner(identity);
    
    var fullControlRule = new FileSystemAccessRule(identity, 
        FileSystemRights.FullControl,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
        PropagationFlags.None, 
        AccessControlType.Allow);
    
    dirSecurity.AddAccessRule(fullControlRule);
    dirInfo.SetAccessControl(dirSecurity);
    

    之后尝试删除文件夹时,我得到 System.UnauthorizedAccessException:访问路径' C:\ a4f31eae62bde1cb4d49834897 \ Sandbox'被拒绝。

    任何帮助将不胜感激!感谢。

1 个答案:

答案 0 :(得分:0)

对我有用的最终解决方案是从命令行(PowerShell)使用接管。虽然我仍然对C#解决方案感兴趣......

感谢用户之后删除了他的建议。

用于清除所提到的文件夹的最终PowerShell代码:

$dirNames = Get-ChildItem "C:\" | Select-String -Pattern "[a-f0-9]{18,30}"

foreach ($dirName in $dirNames) {
    TakeOver("C:\$dirName")
}

function TakeOver($dirPath) {
    takeown /f $dirPath /r /d Y
    #icacls $dirPath /reset /T
}
  • takeown 按预期工作(递归子文件夹)。
  • 在我的情况下不需要
  • icacls ,之后可以删除文件夹。