92 votes

Comment faire pour supprimer un Attribut (par exemple, En lecture seule) à partir d'un Fichier?

Disons, un fichier a les attributs suivants: lecture seule, Caché, d'archiver, de Système. Comment puis-je supprimer un seul Attribut? (par exemple En lecture seule) Si j'utilise:

Io.File.SetAttributes("File.txt",IO.FileAttributes.Normal)

il supprime tous les attributs.

146voto

sll Points 30638

Réponse sur votre question dans le titre concernant l' ReadOnly d'attribut:

FileInfo fileInfo = new FileInfo(pathToAFile);
fileInfo.IsReadOnly = false;
fileInfo.Refresh();

Pour obtenir le contrôle sur n'importe quel attribut, vous pouvez utiliser le Fichier.SetAttributes() la méthode, MSDN lien ci-dessous fournit un extrait de code ainsi

115voto

Preet Sangha Points 39414

À partir de MSDN: Vous pouvez supprimer n'importe quel attribut comme ceci

(mais @sll réponse pour seulement ReadOnly est mieux pour tout cela attribut)

using System;
using System.IO;
using System.Text;
class Test 
{
    public static void Main() 
    {
        string path = @"c:\temp\MyTest.txt";

        // Create the file if it exists.
        if (!File.Exists(path)) 
        {
            File.Create(path);
        }

        FileAttributes attributes = File.GetAttributes(path);

        if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
        {
            // Make the file RW
            attributes = RemoveAttribute(attributes, FileAttributes.ReadOnly);
            File.SetAttributes(path, attributes);
            Console.WriteLine("The {0} file is no longer RO.", path);
        } 
        else 
        {
            // Make the file RO
            File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden);
            Console.WriteLine("The {0} file is now RO.", path);
        }
    }

    private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)
    {
        return attributes & ~attributesToRemove;
    }
}

14voto

Rubens Farias Points 33357
string file = "file.txt";
FileAttributes attrs = File.GetAttributes(file);
if (attrs.HasFlag(FileAttributes.ReadOnly))
    File.SetAttributes(file, attrs & ~FileAttributes.ReadOnly);

1voto

Ahmad Points 3152

Pour une solution en ligne (à condition que l'utilisateur dispose d'un accès pour modifier les attributs de fichier mentionnés) voici comment je ferais:

VB.Net

Shell("attrib file.txt -r")

le signe négatif signifie remove et de la r est en lecture seule. si vous souhaitez supprimer d'autres attributs que vous feriez:

Shell("attrib file.txt -r -s -h -a")

Qui va enlever la Lecture Seule du Système de Fichiers, Caché et attributs Archive.

si vous voulez donner en retour à ces attributs, voici comment:

Shell("attrib file.txt +r +s +h +a")

l'ordre n'a pas d'importance.

C#

Process.Start("cmd.exe", "attrib file.txt +r +s +h +a");

Références

0voto

Kangkan Points 7119

Utilisez ceci:

private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)

Lire le détail ici dans MSDN: http://msdn.microsoft.com/en-us/library/system.io.file.setattributes.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X