Удалить атрибут readonly из каталога - PullRequest
39 голосов
/ 23 февраля 2010

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

Ответы [ 7 ]

81 голосов
/ 23 февраля 2010
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
5 голосов
/ 23 февраля 2010

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

http://www.csharp -examples.net / файл-атрибуты /

на основе их примера вы можете удалить атрибут «Только чтение» следующим образом (я не проверял это):

File.SetAttributes(filePath, File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);
4 голосов
/ 12 апреля 2011

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

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

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

2 голосов
/ 23 февраля 2010

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

        FileInfo file = new FileInfo("c:\\microsoft.text");
        file.IsReadOnly = false;
0 голосов
/ 20 марта 2015
    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);
    }
0 голосов
/ 30 июля 2013

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

0 голосов
/ 23 февраля 2010

Понял наконец.;)

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