Me gustaría saber (usando C #) cómo puedo eliminar archivos en un directorio determinado con más de 3 meses, pero supongo que el período de fecha podría ser flexible.
Para ser claros: estoy buscando archivos que tengan más de 90 días, en otras palabras, los archivos creados hace menos de 90 días deben conservarse y todos los demás deben eliminarse.
Respuestas:
Algo como esto fuera de lugar.
fuente
LastAccessTime
- ¡debería ir a por una propiedadCreationTime
si lo desea!Aquí hay una lambda de 1 línea:
fuente
new DirectoryInfo(dir).GetFiles()
es más rápido quenew FileInfo(f)
para cada archivo.Para aquellos a los que les gusta usar LINQ en exceso.
fuente
.ToList()
agrega la llamada aparte de un segundo bucle a través de los archivos coincidentes?List<T>
define unForEach
método que se puede utilizar para aplicar unAction<T>
a todos los elementos. Desafortunadamente, no existe tal método de extensión paraIEnumerable<T>
.ForEach
método deIEnumerable<T>
extensión hace tanto tiempo que a veces olvido que no está integrado.Aquí hay un fragmento de cómo obtener la hora de creación de los archivos en el directorio y encontrar los que se crearon hace 3 meses (hace 90 días para ser exactos):
fuente
ToList()
,DirectoryInfo.GetFiles()
devuelve aFileInfo[]
.foreach()
ciclo para mantener el valor de(DateTime.Now- new TimeSpan(90, 0, 0, 0))
. No hay razón para calcular eso repetidamente en el ciclo.La propiedad GetLastAccessTime en la clase System.IO.File debería ayudar.
fuente
Básicamente, puede usar Directory.Getfiles (Path) para obtener una lista de todos los archivos. Después de eso, recorre la lista y llama a GetLastAccessTim () como sugirió Keith.
fuente
Algo como eso
fuente
He probado este código y funciona muy bien, espero que esto responda
fuente
El enfoque más canónico cuando se desea eliminar archivos durante un período determinado es utilizar el LastWriteTime del archivo (la última vez que se modificó el archivo):
(Lo anterior se basa en la respuesta de Uri pero con
LastWriteTime
.)Siempre que escuche a personas hablar sobre la eliminación de archivos con una antigüedad superior a un cierto período de tiempo (que es una actividad bastante común), hacerlo basándose en el LastModifiedTime del archivo es casi siempre lo que están buscando.
Alternativamente, para circunstancias muy inusuales, puede usar los siguientes, pero utilícelos con precaución ya que vienen con advertencias.
La hora en que se creó el archivo en la ubicación actual. Sin embargo, tenga cuidado si el archivo se copió, será la hora en que se copió y
CreationTime
será más reciente que el archivoLastWriteTime
.Si desea eliminar los archivos basándose en la última vez que se leyeron, puede usar esto, pero no hay garantía de que se actualizará, ya que se puede deshabilitar en NTFS. Verifique
fsutil behavior query DisableLastAccess
si está encendido. Además, en NTFS, puede tardar hasta una hora en actualizar el LastAccessTime del archivo después de acceder a él.fuente
solo necesita FileInfo -> CreationTime
y que simplemente calcular la diferencia horaria.
en app.config puede guardar el valor TimeSpan de la antigüedad que debe tener el archivo para eliminarlo
también consulte el método DateTime Subtract .
buena suerte
fuente
Alternativamente, puede usar el método File.GetCreationTime si necesita eliminar archivos según las fechas de creación.
fuente
uso en la carga de la página o servicio web o cualquier otro uso.
Mi concepto es evrry 7 días tengo que eliminar el archivo de la carpeta sin usar DB
fuente
fuente
Por ejemplo: para ir a Mi proyecto de carpeta en la fuente, necesito subir dos carpetas. Hago este algoritmo a 2 días a la semana y a cuatro horas.
fuente
Utilizo lo siguiente en una aplicación de consola, ejecutándose como un servicio, para obtener información del directorio del archivo App.Settings. El número de días para conservar los archivos también se puede configurar, multiplicado por -1 para su uso en el método AddDays () de DateTime.Now.
fuente
Un tipo de ejemplo de SSIS ... (si esto ayuda a alguien)
fuente
dado que las soluciones con
new FileInfo(filePath)
no se pueden probar fácilmente, sugiero usar Wrappers para clases comoDirectory
,File
yPath
así:Luego usa algo como esto:
fuente
Simplemente cree una pequeña función de eliminación que pueda ayudarlo a lograr esta tarea. He probado este código y funciona perfectamente.
Esta función elimina archivos de más de 90 días , así como un archivo con extensión .zip para ser eliminado de una carpeta.
fuente