Comment puis-je supprimer par programme l'attribut readonly d'un répertoire en C #?
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
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);
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.
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;
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);
}
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");
}
}
Définir les attributs sur FileAttributes.Normal
a fonctionné pour moi sur les deux dossiers et fichiers .