ファイルにアクセス権を追加する

概要

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
iPentec all rights reserverd.