Meilleure façon de rendre un fichier accessible en écriture en c #
-
05-07-2019 - |
Question
J'essaie de définir un indicateur provoquant l'apparition de la case à cocher en lecture seule
lorsque vous cliquez sur le bouton droit de la souris sur \ Propriétés
dans un fichier.
Merci!
La solution
Deux façons:
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
fileInfo.IsReadOnly = true/false;
ou
// Careful! This will clear other file flags e.g. FileAttributes.Hidden
File.SetAttributes(filePath, FileAttributes.ReadOnly/FileAttributes.Normal);
La propriété IsReadOnly sur FileInfo effectue essentiellement le retournement de bits que vous auriez à faire manuellement dans la deuxième méthode.
Autres conseils
Pour définir l'indicateur en lecture seule, ce qui rend le fichier non inscriptible:
File.SetAttributes(filePath,
File.GetAttributes(filePath) | FileAttributes.ReadOnly);
Pour supprimer l'indicateur en lecture seule, ce qui rend le fichier accessible en écriture:
File.SetAttributes(filePath,
File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);
Pour activer le drapeau en lecture seule, en faisant le contraire de ce qu'il est en ce moment:
File.SetAttributes(filePath,
File.GetAttributes(filePath) ^ FileAttributes.ReadOnly);
Il s’agit essentiellement de bitmasks. Vous définissez un bit spécifique pour définir le drapeau en lecture seule, vous l’effacez pour supprimer le drapeau.
Notez que le code ci-dessus ne modifiera aucune des propriétés du fichier. En d'autres termes, si le fichier a été masqué avant l'exécution du code ci-dessus, il le restera également par la suite. Si vous définissez simplement les attributs de fichier sur .Normal
ou .ReadOnly
, vous risquez de perdre d'autres indicateurs dans le processus.
c #:
File.SetAttributes (filePath, FileAttributes.Normal);
File.SetAttributes (filePath, FileAttributes.ReadOnly);