74

私の.NET 2.0アプリケーションでは、ファイルを作成してディレクトリに書き込むための十分な権限があるかどうかを確認する必要があります。この目的のために、私はファイルを作成しそれにシングルバイトを書き込もうとする次の関数を持っています。その後、自分自身を削除してパーミッションが存在することをテストします。

私がチェックする最良の方法は、実際に試してみて、発生した例外をすべて検出することでした。私は一般的な例外のキャッチについては特にうんざりしていません、それでこれを行うより良いまたはおそらくより受け入れられた方法がありますか?

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;
        }
    }


  • コードのおかげで、1つだけですが、呼び出し側は、書き込みができても削除ができないと書き込み許可がないという誤った印象を受ける可能性があります。私はこれをFileMode.Createを使うように変更してファイルの削除を取り除きます。明らかにあなたはもうこのコードを必要としないでしょう、しかし私は将来の読者の利益のためにこれを書きます。 - n00b
  • string fullPath = directory + TEMP_FILE;fullPathを取得するために文字列を連結する代わりにPath.Combineメソッドを使用してください。Path.Combine(directory, TEMP_FILE) - nomail
  • 誰かがパンチしてから次の日にパンチアウトするとどうなりますか。 2日後にパンチインしてからパンチアウトするとどうなりますか?私は人々がそれらのことをすることになっていないと確信していますが、行動は定義されるべきです。 - Scott Hannen

リンクされた質問


関連する質問

最近の質問