86 lines
3.4 KiB
C#
86 lines
3.4 KiB
C#
using Microsoft.Extensions.Logging;
|
|
|
|
namespace File_Folder_Helper.Helpers;
|
|
|
|
internal static class HelperDeleteEmptyDirectories
|
|
{
|
|
|
|
private static void DeleteOldLogFilesAndDeleteEmptyDirectories(long? ticks, string? searchPattern, string checkDirectory, List<string> deletedDirectories)
|
|
{
|
|
string[] files;
|
|
FileInfo fileInfo;
|
|
string[] directories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly);
|
|
if (ticks is not null && !string.IsNullOrEmpty(searchPattern))
|
|
{
|
|
files = Directory.GetFiles(checkDirectory, searchPattern, SearchOption.TopDirectoryOnly);
|
|
foreach (string file in files)
|
|
{
|
|
fileInfo = new(file);
|
|
if (fileInfo.LastWriteTime.Ticks > ticks)
|
|
continue;
|
|
File.Delete(file);
|
|
}
|
|
}
|
|
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);
|
|
}
|
|
|
|
} |