web-dev-qa-db-fra.com

Supprimer l'attribut readonly du répertoire

Comment puis-je supprimer par programme l'attribut readonly d'un répertoire en C #?

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

Voici un bon lien vers des exemples de modification d'attributs de fichier à l'aide de c #

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

en fonction de leur exemple, vous pouvez supprimer l'attribut Lecture seule comme ceci (je n'ai pas testé cela):

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

L'utilisation de l'opérateur d'affectation - = est dangereuse pour deux raisons: 1) Il fonctionne UNIQUEMENT SI l'attribut ReadOnly est défini, un test est donc requis au préalable .____. 2) Il effectue une opération de soustraction, qui n'est pas pas le meilleur choix lorsque vous travaillez avec des drapeaux binaires. L'opération de soustraction fonctionne si la condition 1 (ci-dessus) est vraie, mais des opérations de soustraction supplémentaires ALTER OTHER BITS dans le champ FileAttributes!

Utilisez "& = ~ FileAttributes.ReadOnly;" pour réinitialiser le drapeau ReadOnly.

Utilisez "| = FileAttributes.ReadOnly;" définir le drapeau ReadOnly.

4
Guakamole2

Si vous essayez de supprimer l'attribut d'un fichier du système de fichiers, créez une instance de la classe System.IO.FileInfo et définissez la propriété IsReadOnly sur 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

Je l'ai enfin. ;)

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

Définir les attributs sur FileAttributes.Normal a fonctionné pour moi sur les deux dossiers et fichiers .

0
daniellmb