it-swarm.com.de

Entfernen Sie das readonly-Attribut aus dem Verzeichnis

Wie kann ich das Readonly-Attribut programmatisch aus einem Verzeichnis in C # entfernen?

38
Red Swan
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
80
Darin Dimitrov

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);
5
Kyle Trauberman

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.

4
Guakamole2

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;
2
cbkadel
    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
Nandini B

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

Das Setzen von Attributen auf FileAttributes.Normal hat für mich in beiden Ordnern und Dateien funktioniert.

0
daniellmb