C#如何使文件在只读状态下进行读写操作

32
如果我需要将文件从只读设置为可读写,应该怎么做呢?例如:File.SetAttributes("C:\\myFile.txt", FileAttributes.ReadOnly); 设置了一个只读文件。
我怀疑可以使用 FileAttributes.Normal 来设置回可读写状态,但这样会改变文件的其他属性吗?MSDN 网站上没有什么具体说明...
引用块中提到:
这个文件是普通的,没有设置任何其他属性。如果单独使用,则此属性有效。
谢谢。
3个回答

55

仅仅移除ReadOnly属性,你需要像这样做:

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

这将移除ReadOnly属性,但会保留文件上已存在的其他属性。


我猜~是用来反转属性的? - Thomas Clayson
4
基本上,“~”运算符返回给定值的按位补码。从语义上讲,以上内容的意思是:“将文件'myfile.txt'的属性设置为'myfile.txt'的属性,但排除只读属性。” - matt
1
如果在您的文件上实例化一个 FileInfo 对象是可行的选项,那么您可以简单地设置它的 IsReadOnly 属性。http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx - Frédéric
3
如果你想让文件变成只读(或者赋予其他属性),需要使用 | 而不是 &。例如:File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.ReadOnly); - SepehrM

20

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

3

虽然我知道有些晚了,但是我还是想分享我的解决方案,希望能帮助到其他人。我需要类似的功能,实现方式是通过在 FileInfo 上设置 IsReadOnly 属性。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接