diff --git a/.vscode/launch.json b/.vscode/launch.json index faa7941..ff337e6 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -13,14 +13,14 @@ "args": [ "s", "X", - "D:/5-Other-Small/Free-File-Sync", - "Day-Helper-2024-08-05", - "*.ffs_gui", - "lines.md", - "C:/Users/phares/AppData/Roaming/FreeFileSync/GlobalSettings.xml", - "5555", - "6666", - "7777", + "D:/5-Other-Small/Kanban-mestsa003/FI-Backlog-Mesa-Request-List/859-FI-Backlog-Mesa-Request-List/.vscode", + "Day-Helper-2024-08-06", + "1000", + "D:/Logs", + "*.txt", + "25", + "4", + "D:/IFXApps/Logs", "8888", "9999" ], diff --git a/Day/2024-Q3/Helper-2024-08-05.cs b/Day/2024-Q3/Helper-2024-08-05.cs index 1260cca..2183966 100644 --- a/Day/2024-Q3/Helper-2024-08-05.cs +++ b/Day/2024-Q3/Helper-2024-08-05.cs @@ -53,11 +53,30 @@ internal static partial class Helper20240805 File.WriteAllText(globalSettingsFile, globalSettingsLines); } + private static void RenameFiles(string find, string replace, string[] ignoreFileNames, string[] confFiles) + { + string checkFile; + foreach (string confFile in confFiles) + { + if (ignoreFileNames.Contains(confFile)) + continue; + checkFile = confFile.Replace(find, replace); + if (File.Exists(checkFile)) + continue; + File.Move(confFile, checkFile); + } + } + internal static void RenameFiles(ILogger logger, List args) { + string find = args[6]; + string replace = args[7]; string sourceDirectory = Path.GetFullPath(args[0]); string globalSettingsFile = Path.GetFullPath(args[4]); string[] files = Directory.GetFiles(sourceDirectory, args[2], SearchOption.TopDirectoryOnly); + string[] confFiles = Directory.GetFiles(sourceDirectory, $"*{find}", SearchOption.TopDirectoryOnly); + string[] ignoreFileNames = args[8].Split(',').Select(l => Path.Combine(sourceDirectory, l)).ToArray(); + RenameFiles(find, replace, ignoreFileNames, confFiles); string checkFile = Path.Combine(sourceDirectory, args[3]); if (files.Length == 0 || !File.Exists(checkFile)) logger.LogWarning("No found!"); diff --git a/Day/2024-Q3/Helper-2024-08-06.cs b/Day/2024-Q3/Helper-2024-08-06.cs new file mode 100644 index 0000000..021b39d --- /dev/null +++ b/Day/2024-Q3/Helper-2024-08-06.cs @@ -0,0 +1,57 @@ +using Microsoft.Extensions.Logging; +using System.Globalization; + +namespace File_Folder_Helper.Day; + +internal static partial class Helper20240806 +{ + + private static void TryArchiveFiles(string sourceDirectory, string pattern, string archiveDirectory, int minimumLength, int days) + { + string checkFile; + FileInfo fileInfo; + string weekOfYear; + string checkDirectory; + string[] directorySegments; + DateTime dateTime = DateTime.Now.AddDays(-days); + Calendar calendar = new CultureInfo("en-US").Calendar; + string[] sourceDirectorySegments = sourceDirectory.Split(Path.DirectorySeparatorChar); + string[] files = Directory.GetFiles(sourceDirectory, pattern, SearchOption.AllDirectories); + if (sourceDirectorySegments.Length < 1) + throw new Exception("Can't be root drive!"); + foreach (string file in files) + { + fileInfo = new FileInfo(file); + if (string.IsNullOrEmpty(fileInfo.DirectoryName) || fileInfo.IsReadOnly || fileInfo.Length < minimumLength || fileInfo.LastWriteTime < dateTime) + continue; + directorySegments = fileInfo.DirectoryName.Split(Path.DirectorySeparatorChar); + if (directorySegments.Length < sourceDirectorySegments.Length) + continue; + weekOfYear = $"{fileInfo.LastWriteTime.Year}_Week_{calendar.GetWeekOfYear(fileInfo.LastWriteTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday):00}"; + checkDirectory = string.Concat(archiveDirectory, Path.DirectorySeparatorChar, weekOfYear); + for (int i = sourceDirectorySegments.Length; i < directorySegments.Length; i++) + checkDirectory = string.Concat(checkDirectory, Path.DirectorySeparatorChar, directorySegments[i]); + checkDirectory = string.Concat(checkDirectory, Path.DirectorySeparatorChar, fileInfo.LastWriteTime.ToString("yyyy-MM-dd")); + if (!Directory.Exists(checkDirectory)) + _ = Directory.CreateDirectory(checkDirectory); + checkFile = Path.Combine(checkDirectory, string.Concat(fileInfo.LastWriteTime.ToString("HH-mm-ss-fff"), "~", fileInfo.Name)); + if (File.Exists(checkFile)) + continue; + File.Move(fileInfo.FullName, checkFile); + } + } + + internal static void ArchiveFiles(ILogger logger, List args) + { + string pattern = args[4]; + int days = int.Parse(args[6]); + logger.LogInformation("Hello"); + string sourceDirectory = args[0]; + int minimumLength = int.Parse(args[5]); + int millisecondsDelay = int.Parse(args[2]); + string archiveDirectory = Path.GetFullPath(args[7]); + TryArchiveFiles(sourceDirectory, pattern, archiveDirectory, minimumLength, days); + Thread.Sleep(millisecondsDelay); + } + +} \ No newline at end of file diff --git a/Day/HelperDay.cs b/Day/HelperDay.cs index dd35a73..a9f0f37 100644 --- a/Day/HelperDay.cs +++ b/Day/HelperDay.cs @@ -87,6 +87,8 @@ internal static class HelperDay Day.Helper20240728.DownloadSslCertificates(logger, args); else if (args[1] == "Day-Helper-2024-08-05") Day.Helper20240805.RenameFiles(logger, args); + else if (args[1] == "Day-Helper-2024-08-06") + Day.Helper20240806.ArchiveFiles(logger, args); else throw new Exception(appSettings.Company); }