viejos una todos subcarpetas por para los fecha extension eliminar confirmacion carpetas carpeta borrar bat archivos antiguos c#

c# - una - forfiles borrar archivos antiguos



Eliminar archivos que son más antiguos que algunos días (7)

Supongo que este es un requisito bastante común en una aplicación que hace un poco de registro. Estoy trabajando en una aplicación de Windows C #, .NET 3.5.

Mi aplicación genera toneladas de archivos de registro que tienen una fecha actual en el nombre del archivo como 20091112. ¿Cuál sería la mejor estrategia para eliminar archivos con más de 30 días? Un enfoque que estoy a punto de usar, es recorrer los nombres de los archivos, extraer la parte de la fecha, convertir en el objeto DateTime y comparar con la fecha de hoy. ¿Hay una solución elegante de Expresión Regular para esto :)? ¿O algo mejor?


Como entiendo, usted quiere usar el nombre del archivo en lugar de la hora de modificación Multa.

Entonces el código es así:

foreach (string file in Directory.GetFiles(path)) { string fileNameOnly=Path.GetFileNameWithoutExtension(file); DateTime fileDate = DateTime.ParseExact(fileNameOnly, "yyyyMMDD", CultureInfo.CurrentCulture); if (DateTime.Now.Subtract(fileDate).TotalDays > MaxDays) File.Delete(file); }


Restar en dos objetos DateTime te dará un objeto TimeSpan , luego puedes verificar su propiedad TotalDays . No puedo pensar en nada más simple que esto.


[En PowerShell], puedes pegar lo siguiente en un archivo PS1 y hacerlo parte de un script de administración si te conviene:

param ($ ruta = $ (lanzar "Necesito indicar la ruta"), $ daysToRetain = $ (lanzar "Necesito indicar cuántos días retener"))

dir $ ruta -r | ? {([datetime] :: UtcNow - $ _. CreationTimeUtc) .TotalDays -gt $ daysToRetain} | del

EDITAR: Y puede usar -match para analizar el nombre si cree que usar los tiempos de archivo no es lo correcto


actualizar .net 4.0:

var files = new DirectoryInfo(directoryPath).GetFiles("*.log"); foreach (var file in files.Where(file => DateTime.UtcNow - file.CreationTimeUtc > TimeSpan.FromHours(2))) { file.Delete(); }


string directoryPath = "/log"; // your log directory path foreach (string filePath in Directory.GetCreationTime(directoryPath)) { TimeSpan fileAge = File.GetLastWriteTime(filePath) - DateTime.Now; if (fileAge.Days > 30) { File.Delete(filePath); } }


string[] files = Directory.GetFiles(path); foreach (string file in files) { if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-5)) { File.Delete(file); } }


var files = new DirectoryInfo(@"c:/log").GetFiles("*.log"); foreach (var file in files) { if (DateTime.UtcNow - file.CreationTimeUtc > TimeSpan.FromDays(30)) { File.Delete(file.FullName); } }