web-dev-qa-db-fra.com

Comment supprimer un fichier en lecture seule?

J'ai un répertoire indésirable dans lequel je lance des téléchargements, des projets ponctuels, des brouillons d'e-mails et d'autres choses qui pourraient être utiles pendant quelques jours mais qui n'ont pas besoin d'être enregistrées pour toujours. Pour empêcher ce répertoire de prendre le contrôle de ma machine, j'ai écrit un programme qui supprimera tous les fichiers antérieurs à un nombre de jours spécifié et enregistre des statistiques sur le nombre de fichiers supprimés et leur taille juste pour le plaisir.

J'ai remarqué que quelques dossiers de projet vivaient beaucoup plus longtemps qu'ils ne le devraient, alors j'ai commencé à enquêter. En particulier, il semblait que les dossiers des projets dans lesquels j'avais utilisé SVN restaient. Il s'avère que les fichiers en lecture seule des répertoires .svn ne sont pas supprimés. Je viens de faire un test simple sur un fichier en lecture seule et j'ai découvert que System.IO.File.Delete et System.IO.FileInfo.Delete ne supprimera pas un fichier en lecture seule.

Je me fiche de la protection des fichiers dans ce répertoire particulier; s'il y a quelque chose d'important, c'est au mauvais endroit. Existe-t-il une classe .NET qui peut supprimer des fichiers en lecture seule, ou vais-je devoir vérifier les attributs en lecture seule et les supprimer?

69
OwenP

Selon documentation de File.Delete, , vous devrez supprimer l'attribut en lecture seule. Vous pouvez définir les attributs du fichier à l'aide de File.SetAttributes () .

using System.IO;

File.SetAttributes(filePath, FileAttributes.Normal);
File.Delete(filePath);
148
Gulzar Nazim

Selon documentation de File.Delete, , vous devrez supprimer l'attribut en lecture seule. Vous pouvez définir les attributs du fichier à l'aide de File.SetAttributes () .

46
Tim Stewart

L'équivalent si vous travaillez avec un objet FileInfo est:

file.IsReadOnly = false;
file.Delete();
19
Neil

Pourquoi faut-il vérifier? Effacez simplement de force l'indicateur de lecture seule et supprimez le fichier.

2
Adam Liss

Hm, je pense que je préfère mettre

>del /F *

dans une tâche planifiée. Peut être enveloppé par un fichier de commandes pour les statistiques de journalisation.

Suis-je en train de manquer quelque chose?

1
mkoeller