繁体   English   中英

C#文件夹权限

[英]C# folder permissions

我需要拥有该文件夹及其子文件夹的所有权才能删除它。 手动处理对我来说很好:

  1. 打开文件夹属性。
  2. 安全选项卡->高级->所有者更改->选中“替换子容器和对象的所有者”
  3. 出现消息框: 您无权读取目录C:\\ a4f31eae62bde1cb4d49834897 \\ Sandbox的内容。 您是否要用授予您“完全控制”权限的目录替换目录权限? 如果按是,将替换所有权限。
  4. 按是
  5. 然后,我可以删除该文件夹。

但是我有大约一百个这样的文件夹( 原因 ),所以我想以编程方式删除它们。

我的代码获得了文件夹的所有权,而不是子文件夹的所有权。

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'。

任何帮助将非常感激! 谢谢。

对我有用的最终解决方案是使用命令行(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 ,之后可以删除文件夹。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM