DeleteOldLogFilesAndDeleteEmptyDirectories

Log bug
Wafer Counter
trigger:  - master
This commit is contained in:
2023-10-01 11:07:36 -07:00
parent b1e63df70b
commit 219fdda4ec
11 changed files with 176 additions and 63 deletions

View File

@ -1,43 +1,86 @@
using Microsoft.Extensions.Logging;
namespace File_Folder_Helper.Helpers;
internal static class HelperDeleteEmptyDirectories
{
internal static bool DeleteEmptyDirectories(string rootDirectory)
private static void DeleteOldLogFilesAndDeleteEmptyDirectories(long? ticks, string? searchPattern, string checkDirectory, List<string> deletedDirectories)
{
bool result;
if (!Directory.Exists(rootDirectory))
result = false;
else
string[] files;
FileInfo fileInfo;
string[] directories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly);
if (ticks is not null && !string.IsNullOrEmpty(searchPattern))
{
string[] files;
string[] directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly);
if (directories.Length > 0)
files = Array.Empty<string>();
else
files = Directory.GetFiles(rootDirectory, "*", SearchOption.AllDirectories);
if (directories.Length == 0 && files.Length == 0)
files = Directory.GetFiles(checkDirectory, searchPattern, SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
result = true;
Directory.Delete(rootDirectory);
}
else
{
result = false;
foreach (string directory in directories)
{
result = DeleteEmptyDirectories(directory);
if (result)
result = DeleteEmptyDirectories(directory);
}
if (files is null)
{
directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly);
result = directories.Length == 0;
}
fileInfo = new(file);
if (fileInfo.LastWriteTime.Ticks > ticks)
continue;
File.Delete(file);
}
}
return result;
if (directories.Length > 0)
files = Array.Empty<string>();
else
files = Directory.GetFiles(checkDirectory, "*", SearchOption.TopDirectoryOnly);
if (directories.Length == 0 && files.Length == 0)
{
try
{ Directory.Delete(checkDirectory); }
catch (UnauthorizedAccessException)
{
new DirectoryInfo(checkDirectory).Attributes = FileAttributes.Normal;
Directory.Delete(checkDirectory);
}
deletedDirectories.Add(checkDirectory);
}
else
{
List<string> check = new();
foreach (string directory in directories)
{
DeleteOldLogFilesAndDeleteEmptyDirectories(ticks, searchPattern, directory, check);
deletedDirectories.AddRange(check);
if (check.Count > 0 && Directory.Exists(directory))
DeleteOldLogFilesAndDeleteEmptyDirectories(ticks, searchPattern, directory, deletedDirectories);
}
}
}
private static void DeleteOldLogFilesAndDeleteEmptyDirectories(ILogger<Worker> logger, long? ticks, string? searchPattern, string rootDirectory)
{
List<string> check = new();
List<string> directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly).ToList();
directories.Add(rootDirectory);
foreach (string directory in directories)
{
logger.LogInformation("{directoryName}", Path.GetFileName(directory));
for (int i = 1; i < 50; i++)
{
if (!Directory.Exists(directory))
break;
check.Clear();
DeleteOldLogFilesAndDeleteEmptyDirectories(ticks, searchPattern, directory, check);
if (check.Count == 0)
break;
}
}
}
internal static void DeleteEmptyDirectories(ILogger<Worker> logger, string rootDirectory)
{
long? ticks = null;
string? searchPattern = null;
DeleteOldLogFilesAndDeleteEmptyDirectories(logger, ticks, searchPattern, rootDirectory);
}
internal static void DeleteOldLogFilesAndDeleteEmptyDirectories(ILogger<Worker> logger, string rootDirectory)
{
long ticks = DateTime.Now.AddHours(-120).Ticks;
DeleteOldLogFilesAndDeleteEmptyDirectories(logger, ticks, "*.log", rootDirectory);
DeleteOldLogFilesAndDeleteEmptyDirectories(logger, ticks, "*.log.*", rootDirectory);
}
}