using File_Watcher.Models; using System.Globalization; using System.Text.RegularExpressions; namespace File_Watcher.Helpers; internal static partial class HelperStratus { // Batch FINAL QA_28_00_12 finished at 10/28/23 00:14. Elapsed time 00:01:34. // Cassette 1T614291 finished. // Mean 9.091, STDD 0.0091 private static void TryMoveFile(AppSettings appSettings, string checkFile) { string line; string weekYearDirectory; List collection = []; DateTime dateTime = DateTime.Now; 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"); for (int i = 0; i < lines.Length; i++) { line = lines[i]; collection.Add(line); if (line.Length < 1 || line[0] != start) 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); collection.Clear(); for (int j = i + 1; j < lines.Length; j++) collection.Add(lines[j]); File.WriteAllLines(checkFile, collection); collection.Clear(); break; } } internal static bool MoveFile(AppSettings appSettings, ILogger logger) { string checkFile = Path.Combine(appSettings.WatchDirectory, appSettings.StratusConfiguration.WatchFile); try { TryMoveFile(appSettings, checkFile); } catch (Exception ex) { logger.LogError(ex, "Inner loop error!"); Thread.Sleep(appSettings.MillisecondsDelay * 5); } return true; } }