驗證對 .NET 應用程式中檔案和目錄的寫入存取權
.NET 開發人員在建立或修改目錄中的檔案之前經常需要確認寫入權限。 一種常見但不太理想的方法包括建立臨時文件,嘗試寫入操作,然後刪除該文件。 這種方法雖然實用,但缺乏優雅和穩健性。
進階方法:利用 Directory.GetAccessControl()
.NET 框架提供了更有效率、更可靠的解決方案:Directory.GetAccessControl(path)
方法。此方法會擷取指定目錄的存取控制清單 (ACL),詳細說明指派給個別使用者和群組的存取權限。
要專門檢查寫入權限,請考慮這種改進的方法:
<code class="language-csharp">public static bool HasWritePermissionOnDir(string path) { bool writeAllowed = false; bool writeDenied = false; var accessControlList = Directory.GetAccessControl(path); if (accessControlList == null) return false; var accessRules = accessControlList.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier)); if (accessRules == null) return false; foreach (FileSystemAccessRule rule in accessRules) { if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write) continue; if (rule.AccessControlType == AccessControlType.Allow) writeAllowed = true; else if (rule.AccessControlType == AccessControlType.Deny) writeDenied = true; } return writeAllowed && !writeDenied; }</code>
此精煉程式碼會分析目錄的 ACL,識別授予或拒絕寫入存取權限的任何規則。 只有當允許寫入存取並且沒有規則明確拒絕它時,它才會返回 true
。 與臨時檔案方法相比,這提供了更準確、更穩健的權限檢查。
以上是如何有效率地檢查.NET中目錄和檔案的寫入權限?的詳細內容。更多資訊請關注PHP中文網其他相關文章!