diff --git a/ADO2024/PI4/Helper-2024-12-24.cs b/ADO2024/PI4/Helper-2024-12-24.cs index 8bb5602..d37479a 100644 --- a/ADO2024/PI4/Helper-2024-12-24.cs +++ b/ADO2024/PI4/Helper-2024-12-24.cs @@ -161,6 +161,47 @@ internal static partial class Helper20241224 } } + private static ReadOnlyDictionary> GetKeyValuePairs(string directory, string searchPattern, string split) + { + string key; + List? collection; + Dictionary> results = []; + string[] files = Directory.GetFiles(directory, searchPattern, SearchOption.TopDirectoryOnly); + FileInfo[] fileInfoCollection = files.Select(l => new FileInfo(l)).ToArray(); + foreach (FileInfo fileInfo in fileInfoCollection.OrderBy(l => l.LastWriteTime)) + { + key = fileInfo.Name.Split(split)[0]; + if (!results.TryGetValue(key, out collection)) + { + results.Add(key, []); + if (!results.TryGetValue(key, out collection)) + throw new Exception(); + } + collection.Add(fileInfo); + } + return results.AsReadOnly(); + } + + private static void DeleteFirst(string directory) + { + string checkFile; + FileInfo fileInfo; + ReadOnlyDictionary> keyValuePairs = GetKeyValuePairs(directory, "*.tar", $"-{DateTime.Now.Year}-"); + foreach (KeyValuePair> keyValuePair in keyValuePairs) + { + if (keyValuePair.Value.Count < 3) + continue; + for (int i = 1; i < keyValuePair.Value.Count - 1; i++) + { + fileInfo = keyValuePair.Value[i]; + checkFile = Path.Combine($"{fileInfo.Directory}-Delete", fileInfo.Name); + if (File.Exists(checkFile)) + continue; + File.Move(fileInfo.FullName, checkFile); + } + } + } + internal static void Compare(ILogger logger, List args) { string host = args[2]; @@ -168,6 +209,7 @@ internal static partial class Helper20241224 string format = NginxFileSystem.GetFormat(); TimeZoneInfo timeZoneInfo = TimeZoneInfo.Local; string compareDirectory = Path.GetFullPath(args[0]); + DeleteFirst(compareDirectory); logger.LogInformation("Comparing files on {host}", host); ReadOnlyCollection records = GetRecord(format, timeZoneInfo, host, new([rootDirectoryName]), compareDirectory); #if ShellProgressBar