Wie kann ich das Readonly-Attribut programmatisch aus einem Verzeichnis in C # entfernen?
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
Hier ist ein guter Link zu Beispielen für das Ändern von Dateiattributen mit c #.
http://www.csharp-examples.net/file-attributes/
anhand ihres Beispiels können Sie das schreibgeschützte Attribut wie folgt entfernen (ich habe das nicht getestet):
File.SetAttributes(filePath, File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);
Die Verwendung des Zuweisungsoperators - = ist aus zwei Gründen gefährlich: 1) Es funktioniert NUR, wenn das ReadOnly-Attribut gesetzt ist, daher ist vorher ein Test erforderlich Nicht die beste Wahl, wenn Sie mit binären Flags arbeiten. Die Subtrahieroperation funktioniert, wenn Bedingung 1 (oben) wahr ist, aber zusätzliche Subtraktionsoperationen ALTER ANDERE BITS im Feld FileAttributes!
Verwenden Sie "& = ~ FileAttributes.ReadOnly;" um das ReadOnly-Flag zurückzusetzen.
Verwenden Sie "| = FileAttributes.ReadOnly;" ReadOnly-Flag setzen.
Wenn Sie versuchen, das Attribut einer Datei im Dateisystem zu entfernen, erstellen Sie eine Instanz der System.IO.FileInfo-Klasse und setzen Sie die Eigenschaft IsReadOnly auf false.
FileInfo file = new FileInfo("c:\\Microsoft.text");
file.IsReadOnly = false;
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);
}
Hab es endlich geschafft. ;)
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");
}
}
Das Setzen von Attributen auf FileAttributes.Normal
hat für mich in beiden Ordnern und Dateien funktioniert.