Stratus
This commit is contained in:
@ -13,13 +13,14 @@ internal static partial class HelperStratus
|
||||
private static void TryMoveFile(AppSettings appSettings, string checkFile)
|
||||
{
|
||||
string line;
|
||||
string checkDirectory;
|
||||
string weekYearDirectory;
|
||||
List<string> collection = [];
|
||||
DateTime dateTime = DateTime.Now;
|
||||
FileInfo fileInfo = new(checkFile);
|
||||
Calendar calendar = new CultureInfo("en-US").Calendar;
|
||||
char start = appSettings.StratusConfiguration.FileDelimiterPattern[0];
|
||||
string[] lines = !File.Exists(checkFile) ? [] : File.ReadAllLines(checkFile);
|
||||
string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
|
||||
string[] lines = !fileInfo.Exists ? [] : File.ReadAllLines(checkFile);
|
||||
string weekOfYear = calendar.GetWeekOfYear(fileInfo.CreationTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
|
||||
for (int i = 0; i < lines.Length; i++)
|
||||
{
|
||||
line = lines[i];
|
||||
@ -28,10 +29,11 @@ internal static partial class HelperStratus
|
||||
continue;
|
||||
if (!Regex.Match(line, appSettings.StratusConfiguration.FileDelimiterPattern).Success)
|
||||
continue;
|
||||
weekYearDirectory = Path.Combine(appSettings.WatchDirectory, $"{dateTime.Year}_Week_{weekOfYear}");
|
||||
if (!Directory.Exists(weekYearDirectory))
|
||||
_ = Directory.CreateDirectory(weekYearDirectory);
|
||||
File.WriteAllLines(Path.Combine(weekYearDirectory, $"{dateTime.Ticks}.txt"), collection);
|
||||
weekYearDirectory = Path.Combine(appSettings.WatchDirectory, $"{fileInfo.CreationTime.Year}_Week_{weekOfYear}");
|
||||
checkDirectory = Path.Combine(weekYearDirectory, fileInfo.CreationTime.ToString("yyyy-MM-dd"));
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
File.WriteAllLines(Path.Combine(checkDirectory, $"{fileInfo.CreationTime.Ticks}.txt"), collection);
|
||||
collection.Clear();
|
||||
for (int j = i + 1; j < lines.Length; j++)
|
||||
collection.Add(lines[j]);
|
||||
@ -41,8 +43,44 @@ internal static partial class HelperStratus
|
||||
}
|
||||
}
|
||||
|
||||
private static void TryArchiveFilesFramework(string sourceDirectory, string pattern, string archiveDirectory, 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 < 2)
|
||||
throw new Exception("Can't be root drive!");
|
||||
foreach (string file in files)
|
||||
{
|
||||
fileInfo = new FileInfo(file);
|
||||
if (string.IsNullOrEmpty(fileInfo.DirectoryName) || fileInfo.LastWriteTime > dateTime)
|
||||
continue;
|
||||
directorySegments = fileInfo.DirectoryName.Split(Path.DirectorySeparatorChar);
|
||||
if (directorySegments.Length < sourceDirectorySegments.Length)
|
||||
continue;
|
||||
weekOfYear = $"{fileInfo.CreationTime.Year}_Week_{calendar.GetWeekOfYear(fileInfo.CreationTime, 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.CreationTime.ToString("yyyy-MM-dd"));
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
checkFile = Path.Combine(checkDirectory, fileInfo.Name);
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(fileInfo.FullName, checkFile);
|
||||
}
|
||||
}
|
||||
|
||||
internal static bool MoveFile(AppSettings appSettings, ILogger<Worker> logger)
|
||||
{
|
||||
// http://10.95.154.10:8081/2023_Week_45/2023-11-08/a.txt
|
||||
string checkFile = Path.Combine(appSettings.WatchDirectory, appSettings.StratusConfiguration.WatchFile);
|
||||
try
|
||||
{ TryMoveFile(appSettings, checkFile); }
|
||||
@ -51,6 +89,19 @@ internal static partial class HelperStratus
|
||||
logger.LogError(ex, "Inner loop error!");
|
||||
Thread.Sleep(appSettings.MillisecondsDelay * 5);
|
||||
}
|
||||
Console.WriteLine("Hello");
|
||||
int days = appSettings.StratusConfiguration.Days;
|
||||
string sourceDirectory = appSettings.WatchDirectory;
|
||||
int millisecondsDelay = appSettings.MillisecondsDelay;
|
||||
string pattern = appSettings.StratusConfiguration.FileDelimiterPattern;
|
||||
string archiveDirectory = Path.GetFullPath(appSettings.StratusConfiguration.Destination);
|
||||
try
|
||||
{ TryArchiveFilesFramework(sourceDirectory, pattern, archiveDirectory, days); }
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Inner loop error!");
|
||||
Thread.Sleep(millisecondsDelay * 5);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user