using System.Globalization; using Microsoft.Extensions.Logging; namespace File_Folder_Helper.ADO2025.PI5; internal static partial class Helper20250218 { internal static void MoveToArchive(ILogger logger, List args) { string checkDirectory; string searchMES = args[4]; string searchPattern = args[3]; string searchSequence = args[5]; string destinationRoot = args[6]; string checkDirectoryName = args[2]; string sourceDirectory = Path.GetFullPath(args[0]); string[] directories = Directory.GetDirectories(sourceDirectory, "*", SearchOption.TopDirectoryOnly); foreach (string directory in directories) { checkDirectory = Path.Combine(directory, checkDirectoryName); if (!Directory.Exists(checkDirectory)) continue; MoveToArchive(logger, searchPattern, searchMES, searchSequence, destinationRoot, checkDirectory); } } private static void MoveToArchive(ILogger logger, string searchPattern, string searchMES, string searchSequence, string destinationRoot, string checkDirectory) { string[] files = Directory.GetFiles(checkDirectory, searchPattern, SearchOption.AllDirectories); if (files.Length == 0) logger.LogInformation("<{files}>(s)", files.Length); else MoveToArchive(logger, searchMES, searchSequence, destinationRoot, files); } private static void MoveToArchive(ILogger logger, string searchMES, string searchSequence, string destinationRoot, string[] files) { string mes; string text; string sequence; string checkFile; string[] matches; FileInfo fileInfo; string weekOfYear; string[] segments; string[] segmentsB; string[] segmentsC; string checkDirectory; Calendar calendar = new CultureInfo("en-US").Calendar; foreach (string file in files) { fileInfo = new(file); if (string.IsNullOrEmpty(fileInfo.DirectoryName)) continue; text = File.ReadAllText(file); segments = text.Split(searchMES); if (segments.Length < 2) continue; segmentsB = text.Split(searchSequence); if (segmentsB.Length < 2) continue; mes = segments[1].Split(';')[0]; sequence = segmentsB[1].Split(';')[0]; segmentsC = Path.GetFileName(fileInfo.DirectoryName).Split('-'); weekOfYear = $"{fileInfo.LastWriteTime.Year}_Week_{calendar.GetWeekOfYear(fileInfo.LastWriteTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday):00}"; checkDirectory = Path.GetFullPath(Path.Combine(destinationRoot, mes, weekOfYear, fileInfo.LastWriteTime.ToString("yyyy-MM-dd"))); if (!Directory.Exists(checkDirectory)) { logger.LogInformation("<{checkDirectory}>", checkDirectory); continue; } matches = Directory.GetDirectories(checkDirectory, sequence, SearchOption.AllDirectories); if (matches.Length != 1) { logger.LogInformation("!= 1 <{checkDirectory}>", checkDirectory); continue; } checkFile = segmentsC.Length == 2 ? Path.Combine(matches[0], $"csv-{segmentsC[1]}-{fileInfo.Name}") : Path.Combine(matches[0], $"csv-{fileInfo.Name}"); if (File.Exists(checkFile)) { logger.LogInformation("csv- {segmentsC} <{checkDirectory}>", segmentsC.Length, checkDirectory); continue; } File.Move(fileInfo.FullName, checkFile); } } } // L:\DevOps\MESA_FI\file-folder-helper\bin\Debug\net8.0\win-x64>dotnet File-Folder-Helper.dll X \\mesfs.infineon.com\EC_EDA\Production\Traces Day-Helper-2025-02-18 Source *.pdsf A_MES_ENTITY= B_SEQUENCE= \\mesfs.infineon.com\EC_Characterization_Si\Archive