web-dev-qa-db-ja.com

C#はファイルを読み取り専用から読み取り/書き込みにします

File.SetAttributes("C:\\myFile.txt", FileAttributes.ReadOnly);がファイルを読み取り専用に設定した場合、必要に応じてファイルを読み取り/書き込みに戻すにはどうすればよいですか?

FileAttributes.Normalただし、これによりファイルの他のプロパティが変更されますか? MSDNサイトにひどく説明的なメモはありません...

ファイルは正常であり、他の属性は設定されていません。この属性は、単独で使用した場合にのみ有効です。

ありがとう

24
Thomas Clayson

ReadOnly属性のみを削除するには、次のようにします。

File.SetAttributes("C:\\myfile.txt", File.GetAttributes("C:\\myfile.txt") & ~FileAttributes.ReadOnly);

これにより、ReadOnly属性が削除されますが、ファイルに既に存在する他の属性は保持されます。

45
matt

File.SetAttributesは、ファイルのすべての属性を置き換えます。

属性を設定および削除する適切な方法は、最初に属性を取得し、変更を適用して、設定することです。

例えば.

var attr = File.GetAttributes(path);

// set read-only
attr = attr | FileAttributes.ReadOnly;
File.SetAttributes(path, attr);

// unset read-only
attr = attr & ~FileAttributes.ReadOnly;
File.SetAttributes(path, attr);
13
Joe

私はこれが非常に遅いことを理解していますが、他の人に役立つことを期待して私の解決策を共有したいと思いました。私は同様のものが必要で、IsReadOnlyFileInfoプロパティを設定することで達成しました。

    private void UnsetReadOnlyAttribute(string filePathWithName)
    {
        FileInfo fileInfo = new FileInfo(filePathWithName);
        if (fileInfo.IsReadOnly)
        {
            fileInfo.IsReadOnly = false;
        }
    }
2
anish