83 lines
3.9 KiB
C#
83 lines
3.9 KiB
C#
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.Logging;
|
|
using Phares.Shared;
|
|
using View_by_Distance.Delete.By.Relative.Models;
|
|
using View_by_Distance.Property.Models;
|
|
using View_by_Distance.Shared.Models.Methods;
|
|
|
|
namespace View_by_Distance.Delete.By.Relative;
|
|
|
|
public class DeleteByRelative
|
|
{
|
|
|
|
public DeleteByRelative(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console)
|
|
{
|
|
if (isSilent)
|
|
{ }
|
|
if (console is null)
|
|
{ }
|
|
string relativePath;
|
|
string checkFileName;
|
|
string searchPattern = "*";
|
|
long ticks = DateTime.Now.Ticks;
|
|
Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
|
|
logger?.LogInformation(configuration.RootDirectory);
|
|
int length = configuration.RootDirectory.Length;
|
|
if (string.IsNullOrEmpty(appSettings.CompareRootDirectory) || Path.GetFullPath(appSettings.CompareRootDirectory) == Path.GetFullPath(configuration.RootDirectory))
|
|
throw new Exception("Check AppSettings file!");
|
|
IEnumerable<(string directory, string[] files)> leftCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(configuration.RootDirectory, searchPattern);
|
|
List<string> leftRelativeFiles = [];
|
|
foreach ((_, string[] files) in leftCollection)
|
|
{
|
|
foreach (string file in files)
|
|
{
|
|
relativePath = Shared.Models.Stateless.Methods.IPath.GetRelativePath(file, length);
|
|
leftRelativeFiles.Add(Path.GetFullPath(string.Concat(appSettings.CompareRootDirectory, relativePath)));
|
|
}
|
|
}
|
|
List<string> deleteFiles = [];
|
|
IEnumerable<(string, string[])> rightCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(appSettings.CompareRootDirectory, searchPattern);
|
|
foreach ((_, string[] files) in rightCollection)
|
|
{
|
|
foreach (string file in files)
|
|
{
|
|
checkFileName = Path.GetFullPath(file);
|
|
if (!leftRelativeFiles.Contains(checkFileName))
|
|
continue;
|
|
deleteFiles.Add(checkFileName);
|
|
}
|
|
}
|
|
string? alongSideDirectory;
|
|
string directoryName = Path.GetFileName(appSettings.CompareRootDirectory);
|
|
if (Path.GetPathRoot(appSettings.CompareRootDirectory) == appSettings.CompareRootDirectory)
|
|
alongSideDirectory = appSettings.CompareRootDirectory;
|
|
else
|
|
alongSideDirectory = Path.GetDirectoryName(appSettings.CompareRootDirectory);
|
|
if (alongSideDirectory is null)
|
|
throw new NullReferenceException(nameof(alongSideDirectory));
|
|
string deleteLog = Path.Combine(alongSideDirectory, $"{directoryName}-{ticks}.tsv");
|
|
File.WriteAllLines(deleteLog, deleteFiles);
|
|
if (deleteFiles.Count > 0)
|
|
{
|
|
logger?.LogInformation($"Ready to delete {deleteFiles.Count} file(s)? See <{deleteLog}>");
|
|
for (int y = 0; y < int.MaxValue; y++)
|
|
{
|
|
logger?.LogInformation("Press \"Y\" key to delete file(s) or close console to not delete files");
|
|
if (Console.ReadKey().Key == ConsoleKey.Y)
|
|
break;
|
|
}
|
|
logger?.LogInformation(". . .");
|
|
foreach (string deleteFile in deleteFiles)
|
|
{
|
|
File.Delete(deleteFile);
|
|
checkFileName = $"{deleteFile}.id";
|
|
if (!File.Exists(checkFileName))
|
|
continue;
|
|
File.Delete(checkFileName);
|
|
}
|
|
for (int i = 1; i < 5; i++)
|
|
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(appSettings.CompareRootDirectory);
|
|
}
|
|
}
|
|
|
|
} |