TryArchiveFiles

This commit is contained in:
Mike Phares 2024-08-07 13:29:47 -07:00
parent e440664659
commit a0699ef634
4 changed files with 86 additions and 8 deletions

16
.vscode/launch.json vendored
View File

@ -13,14 +13,14 @@
"args": [ "args": [
"s", "s",
"X", "X",
"D:/5-Other-Small/Free-File-Sync", "D:/5-Other-Small/Kanban-mestsa003/FI-Backlog-Mesa-Request-List/859-FI-Backlog-Mesa-Request-List/.vscode",
"Day-Helper-2024-08-05", "Day-Helper-2024-08-06",
"*.ffs_gui", "1000",
"lines.md", "D:/Logs",
"C:/Users/phares/AppData/Roaming/FreeFileSync/GlobalSettings.xml", "*.txt",
"5555", "25",
"6666", "4",
"7777", "D:/IFXApps/Logs",
"8888", "8888",
"9999" "9999"
], ],

View File

@ -53,11 +53,30 @@ internal static partial class Helper20240805
File.WriteAllText(globalSettingsFile, globalSettingsLines); 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<Worker> logger, List<string> args) internal static void RenameFiles(ILogger<Worker> logger, List<string> args)
{ {
string find = args[6];
string replace = args[7];
string sourceDirectory = Path.GetFullPath(args[0]); string sourceDirectory = Path.GetFullPath(args[0]);
string globalSettingsFile = Path.GetFullPath(args[4]); string globalSettingsFile = Path.GetFullPath(args[4]);
string[] files = Directory.GetFiles(sourceDirectory, args[2], SearchOption.TopDirectoryOnly); 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]); string checkFile = Path.Combine(sourceDirectory, args[3]);
if (files.Length == 0 || !File.Exists(checkFile)) if (files.Length == 0 || !File.Exists(checkFile))
logger.LogWarning("No found!"); logger.LogWarning("No found!");

View File

@ -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<Worker> logger, List<string> 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);
}
}

View File

@ -87,6 +87,8 @@ internal static class HelperDay
Day.Helper20240728.DownloadSslCertificates(logger, args); Day.Helper20240728.DownloadSslCertificates(logger, args);
else if (args[1] == "Day-Helper-2024-08-05") else if (args[1] == "Day-Helper-2024-08-05")
Day.Helper20240805.RenameFiles(logger, args); Day.Helper20240805.RenameFiles(logger, args);
else if (args[1] == "Day-Helper-2024-08-06")
Day.Helper20240806.ArchiveFiles(logger, args);
else else
throw new Exception(appSettings.Company); throw new Exception(appSettings.Company);
} }