61 lines
2.4 KiB
C#
61 lines
2.4 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace File_Folder_Helper.ADO2025.PI4;
|
|
|
|
internal static partial class Helper20250101
|
|
{
|
|
|
|
private static ReadOnlyDictionary<string, List<FileInfo>> GetKeyValuePairs(string directory, string searchPattern, string split)
|
|
{
|
|
string key;
|
|
List<FileInfo>? collection;
|
|
Dictionary<string, List<FileInfo>> 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<Worker> logger, string appendage, ReadOnlyDictionary<string, List<FileInfo>> keyValuePairs)
|
|
{
|
|
string checkFile;
|
|
FileInfo fileInfo;
|
|
foreach (KeyValuePair<string, List<FileInfo>> 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<Worker> logger, List<string> args)
|
|
{
|
|
string split = args[3];
|
|
string appendage = args[4];
|
|
string searchPattern = args[2];
|
|
string compareDirectory = Path.GetFullPath(args[0]);
|
|
ReadOnlyDictionary<string, List<FileInfo>> keyValuePairs = GetKeyValuePairs(compareDirectory, searchPattern, split);
|
|
logger.LogInformation("KeyValuePairs: {keyValuePairs}", keyValuePairs.Count);
|
|
MoveToDelete(logger, appendage, keyValuePairs);
|
|
}
|
|
|
|
} |