57 lines
2.8 KiB
C#
57 lines
2.8 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using System.Globalization;
|
|
|
|
namespace File_Folder_Helper.ADO2024.PI3;
|
|
|
|
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);
|
|
}
|
|
|
|
} |