我需要拥有该文件夹及其子文件夹的所有权才能将其删除。手动过程对我很有用:
但我有大约数百个文件夹(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'被拒绝。
任何帮助将不胜感激!感谢。
答案 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
}