Удалить атрибут readonly из каталога

Как я могу программно удалить атрибут readonly из каталога в С#?

Ответ 1

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

Ответ 2

Здесь хорошая ссылка на примеры изменения атрибутов файлов с помощью С#

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

на основе их примера, вы можете удалить атрибут "Только для чтения" (это я не тестировал):

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

Ответ 3

Использование оператора = = присваивания опасно по двум причинам: 1) Он работает ТОЛЬКО, если установлен атрибут ReadOnly, поэтому тест требуется заранее. 2) Выполняет операцию вычитания, что не является лучшим выбором при работе с бинарными флагами. Операция вычитания работает, если условие 1 (выше) истинно, но дополнительные операции вычитания будут ALTER OTHER BITS в поле FileAttributes!

Используйте "& = ~ FileAttributes.ReadOnly;" на флаг reset ReadOnly.

Используйте "| = FileAttributes.ReadOnly;" для установки флажка ReadOnly.

Ответ 4

Если вы пытаетесь удалить атрибут файла в файловой системе, создайте экземпляр класса System.IO.FileInfo и установите для свойства IsReadOnly значение false.

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

Ответ 5

Получил это наконец.;)

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

Ответ 6

Атрибуты настройки FileAttributes.Normal работали для меня как в папках, так и файлах.

Ответ 7

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