验证对 .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中文网其他相关文章!