From 32c3a93483a5a2126d831342139a67e18a3e4ef1 Mon Sep 17 00:00:00 2001 From: Schwirg László Date: Fri, 6 Dec 2024 12:22:31 +0100 Subject: [PATCH] v1.30.1 - File cleaner/unblocker üzenet formátumok szépítgetése --- Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------- Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs | 4 ++-- 2 files changed, 72 insertions(+), 33 deletions(-) diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs index 697a3fa..94eb5c8 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs @@ -68,7 +68,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS else if (sr.Result == Menu.SelectionResult.Error) { return o; } else if (sr.Result == Menu.SelectionResult.Ok) { } else { } - foreach (var p in sr.SelectedParameterList) { OneFolderClean(p.Parameters as FolderToClean); } + foreach (var p in sr.SelectedParameterList) { OneFolderProcess(p.Parameters as FolderToClean, FileCleanerManagerCore.FolderProcessingMode.UnblockFiles); } return o; } private static object FolderClean(object parameter, object o) @@ -86,16 +86,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS else if (sr.Result == Menu.SelectionResult.Error) { return o; } else if (sr.Result == Menu.SelectionResult.Ok) { } else { } - foreach (var p in sr.SelectedParameterList) { OneFolderClean(p.Parameters as FolderToClean); } + foreach (var p in sr.SelectedParameterList) { OneFolderProcess(p.Parameters as FolderToClean, FileCleanerManagerCore.FolderProcessingMode.DeleteFiles); } return o; } - private static void OneFolderClean(FolderToClean ftc) + private static void OneFolderProcess(FolderToClean ftc, FileCleanerManagerCore.FolderProcessingMode operation) { try { var di = new DirectoryInfo(ftc.Xml_DirectoryPath); - var success = FileCleanerManagerCore.CleanFolderFiles(di, ftc, enableexecute: true); - ColorConsole.WriteLine($"Folder cleaned. Name:{ftc.Xml_DirectoryPath}", ConsoleColor.Green); + var r = FileCleanerManagerCore.ProcessFolderFiles(operation,di, ftc, recursionlevel:0); + ColorConsole.WriteLine($"Folder processed with '{operation}' . Name:{ftc.Xml_DirectoryPath}. Total files: {r.Item1}, total size: {r.Item2}bytes", ConsoleColor.Green); } catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } } @@ -137,13 +137,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS var operationcolor = ws.Xml_OperationUnblockEnable ? ConsoleColor.Yellow : ws.Xml_OperationDeleteEnable ? ConsoleColor.Red : ConsoleColor.Green; var removeemptyfoldertext = ws.Xml_RemoveEmptyFolder ? " with remove empty folders" : ""; ColorConsole.Write(operationtext + removeemptyfoldertext, operationcolor, prefix: "Operation:", bracket: "[]", suffix: ". "); - ColorConsole.Write(ws.SizeSelectedBeforeClean.ToString(), ConsoleColor.Yellow, prefix: "Size of filtered files now:"); if (ws.Xml_OperationDeleteEnable) { - ColorConsole.Write(ws.SizeSelectedAfterClean.ToString(), ConsoleColor.Yellow, prefix: ", after cleaning:", suffix: ". "); + ColorConsole.Write($"{ws.SizeSelectedBeforeClean} ({ws.NumofSelectedCleaned} files)", ConsoleColor.Yellow, prefix: "Size(num of) of filtered files now:"); + ColorConsole.Write(ws.SizeSelectedAfterClean.ToString(), ConsoleColor.Yellow, prefix: ", after cleaning:", suffix: ". "); ColorConsole.Write(ws.SizeSelectedCleaned.ToString(), ConsoleColor.Red, prefix: "To clean:", suffix: "."); } - ColorConsole.WriteLine(" "); + if (ws.Xml_OperationUnblockEnable) + { + ColorConsole.Write(ws.NumofSelectedCleaned.ToString(), ConsoleColor.Yellow, prefix: "Num of filtered files:"); + } + ColorConsole.WriteLine(" "); return Menu.MenuItemDisplayerReturnValue.NEXTLINE; } else if (lineix == 1) @@ -194,13 +198,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS ftc.SizeFolderTotal= 0; ftc.SizeSelectedBeforeClean = 0; ftc.SizeSelectedCleaned = 0; + ftc.NumofSelectedCleaned = 0; ftc.FolderExists = Directory.Exists(ftc.Xml_DirectoryPath); if (ftc.FolderExists) { var di = new DirectoryInfo(ftc.Xml_DirectoryPath); ftc.SizeFolderTotal = FileCleanerManagerCore.DirSize(di,"*","","",ftc.Xml_Recurse); ftc.SizeSelectedBeforeClean = FileCleanerManagerCore.DirSize(di, ftc.Xml_IncludeMask,ftc.Xml_ExcludeMaskList, ftc.Xml_IncludeFullpathRegexp, ftc.Xml_Recurse); - ftc.SizeSelectedCleaned = FileCleanerManagerCore.CleanFolderFiles(di,ftc,enableexecute:false); + var r = FileCleanerManagerCore.ProcessFolderFiles(FileCleanerManagerCore.FolderProcessingMode.GetInfo, di, ftc, recursionlevel: 0); + ftc.SizeSelectedCleaned = r.Item2; + ftc.NumofSelectedCleaned = r.Item1; } return ftc; } @@ -245,8 +252,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS return size; } #endregion public GetDirSize - #region public FileIsToDelete - public static bool FileIsToDelete(FileInfo fi, FolderToClean ftc) + #region public FileIsToProcess + public static bool FileIsToProcess(FileInfo fi, FolderToClean ftc) { var rgx = new Regex(ftc.Xml_IncludeFullpathRegexp); var rgxmatch = rgx.Match(fi.FullName); @@ -308,9 +315,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS } return false; } - #endregion public FileIsToDelete - #region public UnblockMany,UnblockOne - [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] + #endregion public FileIsToProcess + #region public UnblockMany,UnblockOne + [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool DeleteFile(string name); @@ -324,49 +331,80 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories); foreach (string file in files) { UnblockOne(file); } } - #endregion public UnblockMany,UnblockOne - #region public CleanFolderFiles - public static long CleanFolderFiles(DirectoryInfo d,FolderToClean ftc, bool enableexecute) + #endregion public UnblockMany,UnblockOne + #region public ProcessFolderFiles + public static (int,long) ProcessFolderFiles(FolderProcessingMode operation ,DirectoryInfo d,FolderToClean ftc, int recursionlevel) { + if (operation == FolderProcessingMode.GetInfo || ftc.Xml_OperationUnblockEnable && operation == FolderProcessingMode.UnblockFiles || ftc.Xml_OperationDeleteEnable && operation == FolderProcessingMode.DeleteFiles){ } + else + { + ColorConsole.WriteLine("Function is not available for this folder!", ConsoleColor.Red); + return (0,0); + } + const int MAXPRINTLENGTH = 100; + const int MAXPRINTRECURSIONLEVEL = 2; + + Func maxandpad = (text,w) => { return (text.Length <= w ? text : (text.Substring(0, w) + "...")).PadRight(w + 3, ' '); }; + Action printoneline = (text,linefeed,color) => + { + text = maxandpad(text, MAXPRINTLENGTH); + if (color.HasValue) { ColorConsole.Write(text, color); } else { ColorConsole.Write(text); }; + if (linefeed) { ColorConsole.WriteLine(); } else { ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); }; + }; + int filesprocessed = 0; long cleanedsize = 0; // Add file sizes. FileInfo[] fis = d.GetFiles(ftc.Xml_IncludeMask, SearchOption.TopDirectoryOnly); foreach (FileInfo fi in fis) { - if (FileIsToDelete(fi, ftc)) + if (FileIsToProcess(fi, ftc)) { var fl = fi.Length; try { - if (Regex.Match(fi.Name, ZipTools.FileNameMaskListToRegex(ftc.Xml_ExcludeMaskList)).Success) continue; - if (enableexecute) + if (!string.IsNullOrEmpty(ftc.Xml_ExcludeMaskList) && Regex.Match(fi.Name, ZipTools.FileNameMaskListToRegex(ftc.Xml_ExcludeMaskList)).Success) continue; + if (operation != FolderProcessingMode.GetInfo) { - if (ftc.Xml_OperationUnblockEnable) { UnblockOne(fi.FullName); } - else if (ftc.Xml_OperationDeleteEnable) { System.IO.File.Delete(fi.FullName); } - ColorConsole.Write(fi.FullName); ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); + if (ftc.Xml_OperationUnblockEnable && operation == FolderProcessingMode.UnblockFiles) { UnblockOne(fi.FullName); } + else if (ftc.Xml_OperationDeleteEnable && operation == FolderProcessingMode.DeleteFiles) { System.IO.File.Delete(fi.FullName); } + printoneline(fi.FullName,false,null); } + filesprocessed++; cleanedsize += fl; } - catch { } + catch (Exception ex) + { + Func x = () => { var errmsg = ""; while (ex != null) { errmsg += ex.Message; ex = ex.InnerException; } return errmsg; }; + ColorConsole.WriteLine(x(), ConsoleColor.Red); + //string errmsg2 = (new Func(() => { var errmsg = ""; while (ex != null) { errmsg += ex.Message; ex = ex.InnerException; } return errmsg; }))(); + //ColorConsole.WriteLine(errmsg2, ConsoleColor.Red); + } } } // Add subdirectory sizes. if (ftc.Xml_Recurse) { - foreach (DirectoryInfo di in d.GetDirectories()) { cleanedsize += /*recursion*/ CleanFolderFiles(di, ftc, enableexecute); } + foreach (DirectoryInfo di in d.GetDirectories()) + { + var r = /*recursion*/ ProcessFolderFiles(operation,di, ftc, recursionlevel+1); + filesprocessed += r.Item1; + cleanedsize += r.Item2; + } } if (ftc.Xml_RemoveEmptyFolder && IsDirectoryEmpty(d)) { try { Directory.Delete(d.FullName, ftc.Xml_Recurse); } catch { } } - return cleanedsize; + if (operation != FolderProcessingMode.GetInfo && recursionlevel < MAXPRINTRECURSIONLEVEL) printoneline($"{maxandpad(d.FullName,55)} Processed files:{maxandpad(filesprocessed.ToString(),7)} bytes:{maxandpad(cleanedsize.ToString(),10)}",true,ConsoleColor.White); + return (filesprocessed, cleanedsize); } - #endregion public CleanFolderFiles - } - #endregion class FileCleanerManagerCore + public enum FolderProcessingMode { DeleteFiles, UnblockFiles, GetInfo, } + #endregion public ProcessFolderFiles + } + #endregion class FileCleanerManagerCore - #region FileCleanerManagerCoreXmlProcessor class - public class FileCleanerManagerXmlProcessor : XmlParser + #region FileCleanerManagerCoreXmlProcessor class + public class FileCleanerManagerXmlProcessor : XmlParser { private List _foldertocleanlist; #region constructor @@ -426,6 +464,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS public long SizeSelectedBeforeClean; public long SizeSelectedAfterClean { get { return SizeSelectedBeforeClean - SizeSelectedCleaned; } } public long SizeSelectedCleaned; + public long NumofSelectedCleaned; public int? common_limitdays; public int? common_limitbytes; diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index 6695bd3..89e5bca 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.30.0.0")] -[assembly: AssemblyFileVersion("1.30.0.0")] +[assembly: AssemblyVersion("1.30.1.0")] +[assembly: AssemblyFileVersion("1.30.1.0")] -- libgit2 0.21.2