簡體   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