【发布时间】:2018-09-19 19:18:15
【问题描述】:
我需要拥有该文件夹及其子文件夹的所有权才能将其删除。手动过程对我来说很好:
- 打开文件夹属性。
- 安全选项卡 -> 高级 -> 所有者更改 -> 选中“替换子容器和对象的所有者”
- 出现消息框:您无权读取目录 C:\a4f31eae62bde1cb4d49834897\Sandbox 的内容。您想用授予您完全控制权的权限替换目录权限吗? 如果您按是,所有权限都将被替换。
- 按是
- 然后我就可以删除文件夹了。
但我有大约数百个这样的文件夹 (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: Access to the path 'C:\a4f31eae62bde1cb4d49834897\Sandbox' is denied.
任何帮助将不胜感激!谢谢。
【问题讨论】:
-
尝试以管理员身份运行与运行?
-
对于子文件夹,您是否考虑过制作递归函数?
-
是的,VS 以管理员身份运行。尝试递归设置权限时,我得到 System.UnauthorizedAccessException: 'Attempted to perform an unauthorized operation.' 在 Sanbox 上调用 dirInfo.GetAccessControl() 时i> 子文件夹。我什至没有读取这些子文件夹的权限。
标签: c# permissions