71 lines
3.1 KiB
C#
71 lines
3.1 KiB
C#
using System.Globalization;
|
|
|
|
namespace File_Folder_Helper.Helpers;
|
|
|
|
internal static class HelperLogMerge
|
|
{
|
|
|
|
internal static void LogMerge(string argsZero)
|
|
{
|
|
int hour;
|
|
string day;
|
|
string logFile;
|
|
FileInfo fileInfo;
|
|
string[] segments;
|
|
string checkDirectory;
|
|
List<string> lines = [];
|
|
string format = "yyyyMMdd";
|
|
List<string> moveFiles = [];
|
|
string segment1 = string.Empty;
|
|
string sourceFileNameWithoutExtension;
|
|
DateTime dateTime = DateTime.Now.AddMinutes(2);
|
|
string[] sourceFiles = Directory.GetFiles(argsZero, "*.log", SearchOption.TopDirectoryOnly);
|
|
Dictionary<string, Dictionary<int, string[]>> keyValuePairs = [];
|
|
foreach (string sourceFile in sourceFiles)
|
|
{
|
|
sourceFileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFile);
|
|
if (sourceFileNameWithoutExtension.Split('-').Length > 2)
|
|
continue;
|
|
if (sourceFileNameWithoutExtension.StartsWith(dateTime.ToString(format)))
|
|
continue;
|
|
fileInfo = new FileInfo(sourceFile);
|
|
if (fileInfo.Length == 0)
|
|
moveFiles.Add(sourceFile);
|
|
day = sourceFileNameWithoutExtension[..8];
|
|
if (!keyValuePairs.ContainsKey(day))
|
|
keyValuePairs.Add(day, []);
|
|
if (sourceFileNameWithoutExtension.Substring(8, 1) == "_")
|
|
continue;
|
|
segments = sourceFileNameWithoutExtension.Split('_');
|
|
if (!string.IsNullOrEmpty(segment1) && segment1 != segments[1])
|
|
continue;
|
|
segment1 = segments[1];
|
|
hour = int.Parse(sourceFileNameWithoutExtension.Substring(8, 2));
|
|
if (keyValuePairs[day].TryGetValue(hour, out _))
|
|
continue;
|
|
keyValuePairs[day].Add(hour, File.ReadAllLines(sourceFile));
|
|
moveFiles.Add(sourceFile);
|
|
}
|
|
if (!string.IsNullOrEmpty(segment1))
|
|
{
|
|
foreach (KeyValuePair<string, Dictionary<int, string[]>> keyValuePair in keyValuePairs)
|
|
{
|
|
lines.Clear();
|
|
dateTime = DateTime.ParseExact(keyValuePair.Key, format, CultureInfo.InvariantCulture);
|
|
foreach (KeyValuePair<int, string[]> item in keyValuePair.Value.OrderBy(l => l.Key))
|
|
lines.AddRange(item.Value);
|
|
logFile = Path.Combine(argsZero, $"{dateTime:yyyy-MM-dd}_{segment1}.log");
|
|
File.WriteAllLines(logFile, lines);
|
|
if (dateTime.Hour == 0 && dateTime.Minute == 0 && dateTime.Second == 0 && dateTime.Millisecond == 0)
|
|
_ = dateTime.AddHours(23).AddMinutes(59).AddSeconds(59);
|
|
File.SetLastWriteTime(logFile, dateTime);
|
|
}
|
|
checkDirectory = Path.Combine(argsZero, "_ Merged");
|
|
if (!Directory.Exists(checkDirectory))
|
|
_ = Directory.CreateDirectory(checkDirectory);
|
|
foreach (string moveFile in moveFiles.Distinct())
|
|
File.Move(moveFile, Path.Combine(checkDirectory, Path.GetFileName(moveFile)));
|
|
}
|
|
}
|
|
|
|
} |