从目录中删除readonly属性

时间:2010-02-23 05:28:38

标签: c# .net directory readonly

如何以编程方式从C#中的目录中删除readonly属性?

8 个答案:

答案 0 :(得分:81)

var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;

答案 1 :(得分:5)

这是使用c#

修改文件属性的示例的良好链接

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

根据他们的例子,您可以删除这样的只读属性(我没有测试过这个):

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

答案 2 :(得分:4)

使用 - =赋值运算符是危险的,原因有两个: 1)仅在设置了ReadOnly属性时才有效,因此需要事先进行测试。 2)它正在执行减法运算,这在使用二进制标志时不是最佳选择。如果条件1(上面)为真,则减法操作有效,但在FileAttributes字段中,其他减法操作将改为其他位!

使用“& = ~FileAttributes.ReadOnly;”重置ReadOnly标志。

使用“| = FileAttributes.ReadOnly;”设置ReadOnly标志。

答案 3 :(得分:2)

如果您尝试删除文件系统中文件的属性,请创建System.IO.FileInfo类的实例,并将属性IsReadOnly设置为false。

        FileInfo file = new FileInfo("c:\\microsoft.text");
        file.IsReadOnly = false;

答案 4 :(得分:0)

终于搞定了。 ;)

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

答案 5 :(得分:0)

文件夹文件上将属性设置为FileAttributes.Normal

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果某件事不起作用,该版本将立即包含所有内容

        this._path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "My App Settings");

        if (!Directory.Exists(this._path))
        {
            Directory.CreateDirectory(this._path);

            DirectoryInfo directoryInfo = new DirectoryInfo(this._path);
            directoryInfo.Attributes &= ~FileAttributes.ReadOnly;

            FileSystemInfo[] info = directoryInfo.GetFileSystemInfos("*", SearchOption.AllDirectories);
            for (int i = 0; i < info.Length; i++)
            {
                info[i].Attributes = FileAttributes.Normal;
            }
        }