diff --git a/Wabbajack.Common/Utils.cs b/Wabbajack.Common/Utils.cs index 50a32334..d55e6923 100644 --- a/Wabbajack.Common/Utils.cs +++ b/Wabbajack.Common/Utils.cs @@ -60,13 +60,45 @@ namespace Wabbajack.Common LogFile = Path.Combine(Consts.LogsFolder, Path.GetFileNameWithoutExtension(programName) + ".current.log"); _startTime = DateTime.Now; - if (LogFile.FileExists()) { - var newPath = Path.Combine(Consts.LogsFolder, Path.GetFileNameWithoutExtension(programName) + (new FileInfo(LogFile)).LastWriteTime.ToString(" yyyy-MM-dd HH_mm_ss") + ".log"); + var newPath = Path.Combine(Consts.LogsFolder, Path.GetFileNameWithoutExtension(programName) + new FileInfo(LogFile).LastWriteTime.ToString(" yyyy-MM-dd HH_mm_ss") + ".log"); File.Move(LogFile, newPath, MoveOptions.ReplaceExisting); } + var logFiles = Directory.GetFiles(Consts.LogsFolder); + if (logFiles.Length >= Consts.MaxOldLogs) + { + Log($"Maximum amount of old logs reached ({logFiles.Length} >= {Consts.MaxOldLogs})"); + var filesToDelete = logFiles + .Where(File.Exists) + .OrderBy(f => + { + var fi = new FileInfo(f); + return fi.LastWriteTime; + }).Take(logFiles.Length - Consts.MaxOldLogs).ToList(); + + Log($"Found {filesToDelete.Count} old log files to delete"); + + var success = 0; + var failed = 0; + filesToDelete.Do(f => + { + try + { + File.Delete(f); + success++; + } + catch (Exception e) + { + failed++; + Log($"Could not delete log at {f}!\n{e}"); + } + }); + + Log($"Deleted {success} log files, failed to delete {failed} logs"); + } + var watcher = new FileSystemWatcher(Consts.LocalAppDataPath); AppLocalEvents = Observable.Merge(Observable.FromEventPattern(h => watcher.Changed += h, h => watcher.Changed -= h).Select(e => (FileEventType.Changed, e.EventArgs)), Observable.FromEventPattern(h => watcher.Created += h, h => watcher.Created -= h).Select(e => (FileEventType.Created, e.EventArgs)),