115 lines
5.2 KiB
C#
115 lines
5.2 KiB
C#
using Microsoft.Extensions.Logging;
|
|
|
|
namespace File_Folder_Helper.Helpers;
|
|
|
|
internal static class HelperTooLong
|
|
{
|
|
|
|
internal static void TooLong(string workingDirectory, bool delete)
|
|
{
|
|
string[] files;
|
|
string destination;
|
|
string? parentDirectory;
|
|
string[] directories = Directory.GetDirectories(workingDirectory, "*", SearchOption.TopDirectoryOnly);
|
|
for (int i = 0; i < directories.Length; i++)
|
|
{
|
|
if (delete)
|
|
{
|
|
Directory.Delete(directories[i], recursive: true);
|
|
break;
|
|
}
|
|
files = Directory.GetFiles(directories[i], "*", SearchOption.TopDirectoryOnly);
|
|
for (int f = 0; f < files.Length; f++)
|
|
File.Delete(files[f]);
|
|
parentDirectory = Path.GetDirectoryName(directories[i]);
|
|
if (string.IsNullOrEmpty(parentDirectory))
|
|
continue;
|
|
destination = Path.Combine(parentDirectory, i.ToString());
|
|
if (Path.GetFileName(directories[i]).Length > 3)
|
|
Directory.Move(directories[i], destination);
|
|
TooLong(destination, delete);
|
|
}
|
|
}
|
|
|
|
private static void MoveFiles(string yearName, string personKeyFormattedDirectory, string personNameDirectory, string personNameDirectoryName)
|
|
{
|
|
string? checkFile;
|
|
string? checkDirectory;
|
|
string[] files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
|
|
foreach (string file in files)
|
|
{
|
|
checkDirectory = Path.Combine(personKeyFormattedDirectory, yearName, personNameDirectoryName);
|
|
if (!Directory.Exists(checkDirectory))
|
|
_ = Directory.CreateDirectory(checkDirectory);
|
|
checkFile = Path.Combine(checkDirectory, Path.GetFileName(file));
|
|
if (File.Exists(checkFile))
|
|
continue;
|
|
File.Move(file, checkFile);
|
|
}
|
|
}
|
|
|
|
private static void MaybeMoveFiles(Models.AppSettings appSettings, string[] ticksDirectories)
|
|
{
|
|
string yearName;
|
|
string yearDirectoryName;
|
|
string[] yearDirectories;
|
|
string personKeyFormatted;
|
|
string ticksDirectoryName;
|
|
string personNameDirectoryName;
|
|
string[] personNameDirectories;
|
|
string[] personKeyFormattedDirectories;
|
|
foreach (string ticksDirectory in ticksDirectories)
|
|
{
|
|
ticksDirectoryName = Path.GetFileName(ticksDirectory);
|
|
if (!long.TryParse(ticksDirectoryName, out long directoryTicks))
|
|
break;
|
|
yearName = new DateTime(directoryTicks).Year.ToString();
|
|
personKeyFormattedDirectories = Directory.GetDirectories(ticksDirectory, "*", SearchOption.TopDirectoryOnly);
|
|
foreach (string personKeyFormattedDirectory in personKeyFormattedDirectories)
|
|
{
|
|
personKeyFormatted = Path.GetFileName(personKeyFormattedDirectory);
|
|
if (personKeyFormatted.Length != appSettings.PersonBirthdayFormat.Length)
|
|
break;
|
|
yearDirectories = Directory.GetDirectories(personKeyFormattedDirectory, "*", SearchOption.TopDirectoryOnly);
|
|
foreach (string yearDirectory in yearDirectories)
|
|
{
|
|
personNameDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
|
if (personNameDirectories.Length > 1)
|
|
break;
|
|
if (personNameDirectories.Length == 0)
|
|
continue;
|
|
personNameDirectoryName = Path.GetFileName(personNameDirectories[0]);
|
|
if (!personNameDirectoryName.StartsWith("X+") && personNameDirectoryName.Length != 1)
|
|
break;
|
|
yearDirectoryName = Path.GetFileName(yearDirectory);
|
|
if (yearDirectoryName == yearName)
|
|
continue;
|
|
MoveFiles(yearName, personKeyFormattedDirectory, personNameDirectories[0], personNameDirectoryName);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
internal static void UpdateDateVerifyAndGetTicksDirectories(ILogger<Worker> logger, Models.AppSettings appSettings, string directory)
|
|
{
|
|
string ticksDirectoryName;
|
|
DirectoryInfo directoryInfo;
|
|
string[] ticksDirectories = Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly);
|
|
foreach (string ticksDirectory in ticksDirectories)
|
|
{
|
|
ticksDirectoryName = Path.GetFileName(ticksDirectory);
|
|
if (ticksDirectoryName.Length < 3)
|
|
break;
|
|
if (!long.TryParse(ticksDirectoryName, out long directoryTicks))
|
|
break;
|
|
directoryInfo = new(ticksDirectory);
|
|
if (directoryInfo.CreationTime.Ticks != directoryTicks)
|
|
Directory.SetCreationTime(ticksDirectory, new DateTime(directoryTicks));
|
|
if (directoryInfo.LastWriteTime.Ticks != directoryTicks)
|
|
Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks));
|
|
}
|
|
MaybeMoveFiles(appSettings, ticksDirectories);
|
|
HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, directory);
|
|
}
|
|
|
|
} |