web-dev-qa-db-ja.com

ディレクトリから読み取り専用属性を削除

C#のディレクトリから読み取り専用属性をプログラムで削除するにはどうすればよいですか?

40
Red Swan
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
82
Darin Dimitrov

C#を使用してファイル属性を変更する例へのリンクを次に示します。

http://www.csharp-examples.net/file-attributes/

その例に基づいて、次のように読み取り専用属性を削除できます(これはテストしていません)。

File.SetAttributes(filePath, File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);
7
Kyle Trauberman

-=代入演算子の使用は、次の2つの理由で危険です。1)ReadOnly属性が設定されている場合にのみ機能するため、事前にテストが必要です。 2)減算操作を実行していますが、バイナリフラグを使用する場合、これは最良の選択ではありません。条件1(上記)が真の場合、減算操作は機能しますが、追加の減算操作は、FileAttributesフィールドでALTER OTHER BITS!

「&=〜FileAttributes.ReadOnly;」を使用しますReadOnlyフラグをリセットします。

「| = FileAttributes.ReadOnly;」を使用しますReadOnlyフラグを設定します。

4
Guakamole2

ファイルシステム内のファイルの属性を削除しようとしている場合は、System.IO.FileInfoクラスのインスタンスを作成し、IsReadOnlyプロパティをfalseに設定します。

        FileInfo file = new FileInfo("c:\\Microsoft.text");
        file.IsReadOnly = false;
2
cbkadel
    public static void DeleteDirectory(string path)
    {
        var directory = new DirectoryInfo(path) 
        { Attributes =FileAttributes.Normal };
        foreach (var info in directory.GetFileSystemInfos("*", SearchOption.AllDirectories))
        {
            info.Attributes = FileAttributes.Normal;
        }
        directory.Delete(true);
    }
0
Nandini B

やっと手に入れました。 ;)

class Program
{
    static void Main(string[] args)
    {
        DirectoryInfo di = new DirectoryInfo("c:\\test");

        FileAttributes f = di.Attributes;

        Console.WriteLine("Directory c:\\test has attributes:");
        DecipherAttributes(f);

    }

    public static void DecipherAttributes(FileAttributes f)
    {
        // To set use File.SetAttributes

        File.SetAttributes(@"C:\test", FileAttributes.ReadOnly);

        if ((f & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
            Console.WriteLine("ReadOnly");

        // To remove readonly use "-="
        f -= FileAttributes.ReadOnly;

        if ((f & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
            Console.WriteLine("ReadOnly");
        else
            Console.WriteLine("Not ReadOnly");
    }
}
0
Pratik Deoghare

属性をFileAttributes.Normalに設定すると、foldersfilesの両方で機能しました。

0
daniellmb