Как я могу программно удалить атрибут 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);
}