using Microsoft.Extensions.Logging; using System.Collections.ObjectModel; using System.Globalization; namespace File_Folder_Helper.ADO2024.PI3; internal static partial class Helper20240910 { internal static void MoveFilesToWeekOfYear(ILogger logger, List args) { string day; string year; string yearB; string yearC; string checkFile; FileInfo fileInfo; string weekOfYear; int weekOfYearValue; string checkDirectory; string searchPattern = args[2]; ReadOnlyCollection directoryNames; string sourceDirectory = Path.GetFullPath(args[0]); Calendar calendar = new CultureInfo("en-US").Calendar; string[] files = Directory.GetFiles(sourceDirectory, searchPattern, SearchOption.AllDirectories); logger.LogInformation("With search pattern '{SearchPattern}' found {files}", searchPattern, files.Length); foreach (string file in files) { fileInfo = new(file); if (string.IsNullOrEmpty(fileInfo.DirectoryName)) continue; checkDirectory = string.Empty; year = $"{fileInfo.LastWriteTime:yyyy}"; yearB = $"{fileInfo.LastWriteTime:yyyy}_Year"; day = fileInfo.LastWriteTime.ToString("yyyy-MM-dd"); directoryNames = Helpers.HelperDirectory.GetDirectoryNames(fileInfo.DirectoryName); weekOfYearValue = calendar.GetWeekOfYear(fileInfo.LastWriteTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday); yearC = weekOfYearValue < 27 ? $"{fileInfo.LastWriteTime:yyyy}_Year_A" : $"{fileInfo.LastWriteTime:yyyy}_Year_Z"; weekOfYear = $"{fileInfo.LastWriteTime.Year}_Week_{weekOfYearValue:00}"; foreach (string directoryName in directoryNames) { if (directoryName == year || directoryName == yearB || directoryName == yearC || directoryName == weekOfYear || directoryName == day) continue; checkDirectory = Path.Combine(checkDirectory, directoryName); } if (string.IsNullOrEmpty(checkDirectory)) continue; checkDirectory = Path.Combine(checkDirectory, yearC, weekOfYear, day); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); checkFile = Path.Combine(checkDirectory, fileInfo.Name); if (checkFile.Length > 256 || checkFile == fileInfo.FullName) continue; try { if (File.Exists(checkFile)) continue; File.Move(fileInfo.FullName, checkFile); } catch (Exception ex) { logger.LogInformation(ex, $"Inner loop error <{fileInfo.FullName}>!"); } } Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, sourceDirectory); } }