[解決済み] .NETでディレクトリやファイルの書き込み権限をチェックする
2023-05-02 11:32:12
質問
私の .NET 2.0 アプリケーションでは、ディレクトリにファイルを作成し、書き込むのに十分なパーミッションが存在するかどうかを確認する必要があります。この目的のために、私はファイルを作成し、それに 1 バイトを書き込もうとする次の関数を持っており、権限が存在することをテストするために後で自分自身を削除します。
私は、チェックする最良の方法は、実際にそれを試して、発生するすべての例外をキャッチすることであると考えました。しかし、私は一般的な例外のキャッチについて特に満足していませんので、これを行うより良い、またはおそらくより受け入れられた方法はありますか?
private const string TEMP_FILE = "\\tempFile.tmp";
/// <summary>
/// Checks the ability to create and write to a file in the supplied directory.
/// </summary>
/// <param name="directory">String representing the directory path to check.</param>
/// <returns>True if successful; otherwise false.</returns>
private static bool CheckDirectoryAccess(string directory)
{
bool success = false;
string fullPath = directory + TEMP_FILE;
if (Directory.Exists(directory))
{
try
{
using (FileStream fs = new FileStream(fullPath, FileMode.CreateNew,
FileAccess.Write))
{
fs.WriteByte(0xff);
}
if (File.Exists(fullPath))
{
File.Delete(fullPath);
success = true;
}
}
catch (Exception)
{
success = false;
}
}
どのように解決するのですか?
回答は リチャード と ジェイソン は、ある意味正しい方向です。しかし、あなたがすべきことは 有効なパーミッションの計算 を計算することです。上記のどの例も、例えばグループ メンバーシップを正しく考慮していません。
確か キース・ブラウン には、これを行うコードがあったはずです。 wiki バージョン (この時点ではオフライン) の Windows セキュリティのための .NET 開発者ガイド . また、このことは、彼の プログラミング Windows セキュリティ の本でも、それなりに詳しく説明されています。
効果的なパーミッションを計算することは、気の弱い人のためではなく、ファイルを作成し、投げられたセキュリティ例外をキャッチしようとするあなたのコードは、おそらく最も抵抗の少ない道でしょう。
関連
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] .NET String.Format()で数値の千の位にカンマを追加する
-
[解決済み] ディレクトリ内のすべてのファイルやフォルダを削除する方法は?
-
[解決済み] バッチファイルにおけるカレントディレクトリとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み】C# ユーザーがフォルダに書き込み権限を持っているかどうかをテストする