using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Timers; namespace SinoChemFC2PosProxy { public class LogPurge { private System.Timers.Timer scannerTimer; private int purgeLogFilesWhenOldThanDays = -1; string[] searchFolders = new[] { //Proxy_Main_20150831.txt @"c:\Wayne\Log\SinoChemFC2PosProxy\", //SSF.FC.20150826.132125928.LOG.gz @"c:\Program Files\Fusion\Bin\SSF.Logs\SSF.FC.Logs\Backup\", //SSF.ROUTER.20150826.094252740.LOG.gz @"c:\Program Files\Fusion\Bin\SSF.Logs\SSF.Router.Logs\Backup\", }; public void Start() { this.purgeLogFilesWhenOldThanDays = int.Parse(ConfigurationManager.AppSettings["purgeLogFilesWhenOldThanDays"]); // every 1 days, do a log purge. this.scannerTimer = new System.Timers.Timer(1000 * 60);// * 60 * 24); this.scannerTimer.Elapsed += scannerTimer_Elapsed; this.scannerTimer.Start(); } void scannerTimer_Elapsed(object sender, ElapsedEventArgs e) { foreach (var dirPath in searchFolders) { var dirInfo = new DirectoryInfo(dirPath); if (!dirInfo.Exists) continue; foreach (var logFileInfo in dirInfo.GetFiles()) { if (isFilePendingForPurge(logFileInfo)) { logFileInfo.Delete(); } } } } private bool isFilePendingForPurge(FileInfo fileInfo) { Regex r = new Regex(@"20\d\d\d\d\d\d\."); var dateInFileName = r.Match(fileInfo.Name); if (dateInFileName.Success) { var dateString = dateInFileName.Value.Substring(0, dateInFileName.Value.Length - 1); dateString = dateString.Substring(0, 4) + "-" + dateString.Substring(4, 2) + "-" + dateString.Substring(6, 2); DateTime convertedDateTime; try { convertedDateTime = DateTime.Parse(dateString); } catch (Exception exx) { return false; } var timeDiff = DateTime.Now - convertedDateTime; if (timeDiff.TotalDays >= this.purgeLogFilesWhenOldThanDays) { return true; } else { return false; } } return false; } } }