ファイルにアクセス権を追加する
概要
C#でファイルにアクセス権を追加する方法を紹介します。
ファイルにアクセス権を付与するには、FileクラスのSetAccessControlメソッドを用います。
コード例 : .NET Core / .NET 5以降
ボタン(button5)をクリックすると、
c:\develop\text.txt
に"everyone"の
「読み取り、書き込み、フォルダーの内容の一覧表示、フォルダーとファイルの削除、およびアプリケーション ファイルの実行を行う権限」のアクセス権を付与します。
private void button1_Click(object sender, EventArgs e)
{
string filePath = @"c:\\develop\text.txt";
FileSystemAccessRule rule = new FileSystemAccessRule(
new NTAccount("everyone"),
FileSystemRights.Modify,
AccessControlType.Allow);
FileInfo fi = new FileInfo(filePath);
FileSecurity security = FileSystemAclExtensions.GetAccessControl(fi);
security.AddAccessRule(rule);
FileSystemAclExtensions.SetAccessControl(fi, security);
}
解説
はじめに、FileSystemAccessRule オブジェクトを作成し、ファイルに追加するアクセス権の情報を作成します。
今回は everyone ユーザーに編集権限を追加するため、FileSystemAccessRuleのコンストラクタの
第一引数に everyone の NTAccount オブジェクト、第二引数に
FileSystemRights.Modify
、第三引数に
AccessControlType.Allow
を与えます。
ファイルにアクセス権を設定するには、変更するファイルのファイルパスから、FileInfoオブジェクトを作成し、FileSystemAclExtensions.GetAccessControl() メソッドを呼び出し、
ファイルのFileSecurityオブジェクトを取得ます。
取得した、FileSecurity オブジェクトのAddAccessRuleメソッド呼び出し、第一引数に設定したい FileSystemAccessRuleを与えます。
設定後 SetAccessControlメソッドを呼び出し、ファイルに変更したFileSecurityオブジェクトを適用します。
コード例 : .NET Framework
ボタン(button5)をクリックすると、
c:\develop\text.txt
に"everyone"の
「読み取り、書き込み、フォルダーの内容の一覧表示、フォルダーとファイルの削除、およびアプリケーション ファイルの実行を行う権限」のアクセス権を付与します。
private void button5_Click(object sender, EventArgs e)
{
string filePath = @"c:\\develop\text.txt";
FileSystemAccessRule rule = new FileSystemAccessRule(
new NTAccount("everyone"),
FileSystemRights.Modify,
AccessControlType.Allow);
FileSecurity security = File.GetAccessControl(filePath);
security.AddAccessRule(rule);
File.SetAccessControl(filePath, security);
}
解説
.NET Framework の場合も.NET と同様のコードですが、
FileSecurity オブジェクトが.NET の場合は、FileInfoオブジェクトまたは、FileStreamを準備してから取得するコードに対して、
.NET Frameworkでは設定したいファイルのファイルパスから直接取得できます。
FileSecurity オブジェクト取得後のアクセス権設定は.NETの場合と同様です。
実行結果
アクセス権変更前の状態です・
アクセス権変更後(Button押下後)の状態です。everyone ユーザーの項目が追加され、
変更、読み取りと実行、読み取り、書き込みの権限が付与されています。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-11-22
改訂日: 2022-11-02