.NET アプリケーションのファイルとディレクトリへの書き込みアクセスの検証
.NET 開発者は、ディレクトリ内でファイルを作成または変更する前に、書き込み権限を確認する必要があることがよくあります。 一般的ではありますが、理想的ではありませんが、一時ファイルを作成し、書き込み操作を試行し、その後ファイルを削除する方法があります。 このアプローチは機能的ではありますが、優雅さと堅牢性に欠けています。
優れたアプローチ: Directory.GetAccessControl() の活用
.NET Framework は、より効率的で信頼性の高いソリューションである 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 中国語 Web サイトの他の関連記事を参照してください。