diff --git a/Day/Q22024/Helper-2024-04-27.cs b/Day/Q22024/Helper-2024-04-27.cs index 82f0c67..e052920 100644 --- a/Day/Q22024/Helper-2024-04-27.cs +++ b/Day/Q22024/Helper-2024-04-27.cs @@ -1,5 +1,6 @@ using File_Folder_Helper.Helpers; using Microsoft.Extensions.Logging; +using System.Collections.ObjectModel; using System.Text.Json; using System.Text.Json.Serialization; @@ -54,7 +55,7 @@ internal static partial class Helper20240427 string checkDirectory = home; string sourceDirectory = home; string originalFileNameWithoutExtension = Path.GetFileNameWithoutExtension(originalFileName); - List directoryNames = HelperDirectory.GetDirectoryNames(path); + ReadOnlyCollection directoryNames = HelperDirectory.GetDirectoryNames(path); for (int i = 0; i < directoryNames.Count; i++) { if (directoryNames[i] != lastVarDirectoryName) @@ -99,7 +100,7 @@ internal static partial class Helper20240427 private static void MoveAssets(ILogger logger, string var, string home, string pictures, List assets) { string? checkFile; - List varDirectoryNames = HelperDirectory.GetDirectoryNames(home); + ReadOnlyCollection varDirectoryNames = HelperDirectory.GetDirectoryNames(home); string lastVarDirectoryName = varDirectoryNames[^1]; foreach (Asset asset in assets) { diff --git a/Day/Q32024/Helper-2024-09-10.cs b/Day/Q32024/Helper-2024-09-10.cs index 6eff004..4ae88ba 100644 --- a/Day/Q32024/Helper-2024-09-10.cs +++ b/Day/Q32024/Helper-2024-09-10.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using System.Collections.ObjectModel; using System.Globalization; namespace File_Folder_Helper.Day.Q32024; @@ -7,23 +8,39 @@ internal static partial class Helper20240910 internal static void MoveFilesToWeekOfYear(ILogger logger, List args) { + string day; + string year; string checkFile; + FileInfo fileInfo; string weekOfYear; string checkDirectory; - string searchPattern = args[2]; string sourceDirectory = args[0]; + ReadOnlyCollection directoryNames; + string searchPattern = Path.GetFullPath(args[2]); 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); - FileInfo[] collection = files.Select(l => new FileInfo(l)).ToArray(); - foreach (FileInfo fileInfo in collection) + foreach (string file in files) { + fileInfo = new(file); + if (string.IsNullOrEmpty(fileInfo.DirectoryName)) + continue; + checkDirectory = string.Empty; + year = fileInfo.LastWriteTime.ToString("yyyy"); + day = fileInfo.LastWriteTime.ToString("yyyy-MM-dd"); + directoryNames = Helpers.HelperDirectory.GetDirectoryNames(fileInfo.DirectoryName); weekOfYear = $"{fileInfo.LastWriteTime.Year}_Week_{calendar.GetWeekOfYear(fileInfo.LastWriteTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday):00}"; - checkDirectory = Path.Combine(sourceDirectory, weekOfYear, fileInfo.LastWriteTime.ToString("yyyy-MM-dd")); + foreach (string directoryName in directoryNames) + { + if (directoryName == year || directoryName == weekOfYear || directoryName == day) + continue; + checkDirectory = Path.Combine(checkDirectory, directoryName); + } + checkDirectory = Path.Combine(checkDirectory, year, weekOfYear, day); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); checkFile = Path.Combine(checkDirectory, fileInfo.Name); - if (checkFile == fileInfo.FullName) + if (checkFile.Length > 256 || checkFile == fileInfo.FullName) continue; try { @@ -32,8 +49,9 @@ internal static partial class Helper20240910 File.Move(fileInfo.FullName, checkFile); } catch (Exception ex) - { logger.LogInformation(ex, "Inner loop error!"); } + { logger.LogInformation(ex, $"Inner loop error <{fileInfo.FullName}>!"); } } + Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, sourceDirectory); } } \ No newline at end of file diff --git a/Helpers/HelperDirectory.cs b/Helpers/HelperDirectory.cs index 0496c46..e051501 100644 --- a/Helpers/HelperDirectory.cs +++ b/Helpers/HelperDirectory.cs @@ -1,9 +1,11 @@ +using System.Collections.ObjectModel; + namespace File_Folder_Helper.Helpers; internal static class HelperDirectory { - internal static List GetDirectoryNames(string directory) + internal static ReadOnlyCollection GetDirectoryNames(string directory) { List results = []; string? fileName; @@ -36,7 +38,7 @@ internal static class HelperDirectory } results.Add(pathRoot); results.Reverse(); - return results; + return new(results); } } \ No newline at end of file