using Microsoft.Extensions.Logging; using System.Collections.ObjectModel; namespace File_Folder_Helper.ADO2025.PI4; internal static partial class Helper20250101 { 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 MoveToDelete(ILogger logger, string appendage, ReadOnlyDictionary> keyValuePairs) { string checkFile; FileInfo fileInfo; 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}{appendage}", fileInfo.Name); if (File.Exists(checkFile)) continue; logger.LogInformation("Moving <{fileInfo.FullName}> to <{checkFile}>", fileInfo.FullName, checkFile); File.Move(fileInfo.FullName, checkFile); } } } internal static void MoveToDelete(ILogger logger, List args) { string split = args[3]; string appendage = args[4]; string searchPattern = args[2]; string compareDirectory = Path.GetFullPath(args[0]); ReadOnlyDictionary> keyValuePairs = GetKeyValuePairs(compareDirectory, searchPattern, split); logger.LogInformation("KeyValuePairs: {keyValuePairs}", keyValuePairs.Count); MoveToDelete(logger, appendage, keyValuePairs); } }