2008-11-05 41 views
66

Tengo un directorio de basura donde arrojo descargas, proyectos únicos, borradores de correo electrónico y otras varias cosas que pueden ser útiles por unos días pero que no necesitan guardarse para siempre. Para evitar que este directorio se apodere de mi máquina, escribí un programa que eliminará todos los archivos anteriores a un número específico de días y registrará algunas estadísticas sobre la cantidad de archivos eliminados y su tamaño solo por diversión.¿Cómo elimino un archivo de solo lectura?

Noté que algunas carpetas de proyecto estaban viviendo mucho más de lo que deberían, así que comencé a investigar. En particular, parecía que las carpetas para proyectos en las que había usado SVN se quedaban. Resulta que los archivos de solo lectura en los directorios .svn no se eliminan. Acabo de hacer una prueba simple en un archivo de solo lectura y descubrí que System.IO.File.Delete y System.IO.FileInfo.Delete no eliminarán un archivo de solo lectura.

No me importa proteger archivos en este directorio en particular; si algo importante está ahí, está en el lugar equivocado. ¿Existe una clase .NET que pueda eliminar archivos de solo lectura, o voy a tener que verificar los atributos de solo lectura y quitarlos?

+2

me cambió la respuesta aceptada porque Gulzar de la muestra del código es más detallada que la de Tim Stewart. Debería haber elegido esa en primer lugar, pero por alguna razón me gustó Tim es mejor. ¡Las personas son cosas raras! – OwenP

+4

+1 por tomarse el tiempo para hacer las cosas un poco más correctas en el universo. Si solo mis desarrolladores regresaran y corrigieran nuestras propias transgresiones menores, ¡podríamos cancelar las clases de Programación correctiva! –

Respuesta

133

Adición de un código de ejemplo de la respuesta de Tim:

using System.IO; 

File.SetAttributes(filePath, FileAttributes.Normal); 
File.Delete(filePath); 
+0

Recibes un voto positivo por tener razón, pero tu respuesta vino después de la de Tim Stewart, que decía lo mismo. – OwenP

+3

eso está bien. Tim lo merece. pensé que algún código ayudaría. –

+0

En algunos casos, es posible que también necesite apropiarse del archivo antes de poder borrar el indicador de solo lectura o eliminarlo. Ver http://stackoverflow.com/questions/12999272/ para más detalles. –

2

¿Por qué es necesario que verifique? Simplemente borre a la fuerza el indicador de solo lectura y elimine el archivo.

1

Hm, creo que más bien pondría

>del /F * 

en una tarea sheduled. Tal vez envuelto por un archivo por lotes para estadísticas de registro.

¿Echo de menos algo?

+0

Sí. Él quiere borrar un archivo cuando tiene una edad particular. No todos los archivos cada período. –

+0

No quiere borrar todos los archivos, solo todos los archivos anteriores a cierto tiempo. –

16

El equivalente si quieres pasar a estar trabajando con un objeto FileInfo es:

file.IsReadOnly = false; 
file.Delete(); 
Cuestiones relacionadas