Remove readonly attribute from directory

Viewed 62597

How can I programatically remove the readonly attribute from a directory in C#?

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

Here's a good link to examples of modifying file attributes using c#

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

based on their example, you can remove the Read Only attribute like this (I haven't tested this):

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

If you're attempting to remove the attribute of a file in the file system, create an instance of the System.IO.FileInfo class and set the property IsReadOnly to false.

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

And the version with everything at once if something did not work

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

Got it finally. ;)

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