Commit 32c3a93483a5a2126d831342139a67e18a3e4ef1
1 parent
2a636a78
v1.30.1
- File cleaner/unblocker üzenet formátumok szépítgetése
Showing
2 changed files
with
72 additions
and
33 deletions
Show diff stats
Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs
| @@ -68,7 +68,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | @@ -68,7 +68,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | ||
| 68 | else if (sr.Result == Menu.SelectionResult.Error) { return o; } | 68 | else if (sr.Result == Menu.SelectionResult.Error) { return o; } |
| 69 | else if (sr.Result == Menu.SelectionResult.Ok) { } | 69 | else if (sr.Result == Menu.SelectionResult.Ok) { } |
| 70 | else { } | 70 | else { } |
| 71 | - foreach (var p in sr.SelectedParameterList) { OneFolderClean(p.Parameters as FolderToClean); } | 71 | + foreach (var p in sr.SelectedParameterList) { OneFolderProcess(p.Parameters as FolderToClean, FileCleanerManagerCore.FolderProcessingMode.UnblockFiles); } |
| 72 | return o; | 72 | return o; |
| 73 | } | 73 | } |
| 74 | private static object FolderClean(object parameter, object o) | 74 | private static object FolderClean(object parameter, object o) |
| @@ -86,16 +86,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | @@ -86,16 +86,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | ||
| 86 | else if (sr.Result == Menu.SelectionResult.Error) { return o; } | 86 | else if (sr.Result == Menu.SelectionResult.Error) { return o; } |
| 87 | else if (sr.Result == Menu.SelectionResult.Ok) { } | 87 | else if (sr.Result == Menu.SelectionResult.Ok) { } |
| 88 | else { } | 88 | else { } |
| 89 | - foreach (var p in sr.SelectedParameterList) { OneFolderClean(p.Parameters as FolderToClean); } | 89 | + foreach (var p in sr.SelectedParameterList) { OneFolderProcess(p.Parameters as FolderToClean, FileCleanerManagerCore.FolderProcessingMode.DeleteFiles); } |
| 90 | return o; | 90 | return o; |
| 91 | } | 91 | } |
| 92 | - private static void OneFolderClean(FolderToClean ftc) | 92 | + private static void OneFolderProcess(FolderToClean ftc, FileCleanerManagerCore.FolderProcessingMode operation) |
| 93 | { | 93 | { |
| 94 | try | 94 | try |
| 95 | { | 95 | { |
| 96 | var di = new DirectoryInfo(ftc.Xml_DirectoryPath); | 96 | var di = new DirectoryInfo(ftc.Xml_DirectoryPath); |
| 97 | - var success = FileCleanerManagerCore.CleanFolderFiles(di, ftc, enableexecute: true); | ||
| 98 | - ColorConsole.WriteLine($"Folder cleaned. Name:{ftc.Xml_DirectoryPath}", ConsoleColor.Green); | 97 | + var r = FileCleanerManagerCore.ProcessFolderFiles(operation,di, ftc, recursionlevel:0); |
| 98 | + ColorConsole.WriteLine($"Folder processed with '{operation}' . Name:{ftc.Xml_DirectoryPath}. Total files: {r.Item1}, total size: {r.Item2}bytes", ConsoleColor.Green); | ||
| 99 | } | 99 | } |
| 100 | catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } | 100 | catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } |
| 101 | } | 101 | } |
| @@ -137,13 +137,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | @@ -137,13 +137,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | ||
| 137 | var operationcolor = ws.Xml_OperationUnblockEnable ? ConsoleColor.Yellow : ws.Xml_OperationDeleteEnable ? ConsoleColor.Red : ConsoleColor.Green; | 137 | var operationcolor = ws.Xml_OperationUnblockEnable ? ConsoleColor.Yellow : ws.Xml_OperationDeleteEnable ? ConsoleColor.Red : ConsoleColor.Green; |
| 138 | var removeemptyfoldertext = ws.Xml_RemoveEmptyFolder ? " with remove empty folders" : ""; | 138 | var removeemptyfoldertext = ws.Xml_RemoveEmptyFolder ? " with remove empty folders" : ""; |
| 139 | ColorConsole.Write(operationtext + removeemptyfoldertext, operationcolor, prefix: "Operation:", bracket: "[]", suffix: ". "); | 139 | ColorConsole.Write(operationtext + removeemptyfoldertext, operationcolor, prefix: "Operation:", bracket: "[]", suffix: ". "); |
| 140 | - ColorConsole.Write(ws.SizeSelectedBeforeClean.ToString(), ConsoleColor.Yellow, prefix: "Size of filtered files now:"); | ||
| 141 | if (ws.Xml_OperationDeleteEnable) | 140 | if (ws.Xml_OperationDeleteEnable) |
| 142 | { | 141 | { |
| 143 | - ColorConsole.Write(ws.SizeSelectedAfterClean.ToString(), ConsoleColor.Yellow, prefix: ", after cleaning:", suffix: ". "); | 142 | + ColorConsole.Write($"{ws.SizeSelectedBeforeClean} ({ws.NumofSelectedCleaned} files)", ConsoleColor.Yellow, prefix: "Size(num of) of filtered files now:"); |
| 143 | + ColorConsole.Write(ws.SizeSelectedAfterClean.ToString(), ConsoleColor.Yellow, prefix: ", after cleaning:", suffix: ". "); | ||
| 144 | ColorConsole.Write(ws.SizeSelectedCleaned.ToString(), ConsoleColor.Red, prefix: "To clean:", suffix: "."); | 144 | ColorConsole.Write(ws.SizeSelectedCleaned.ToString(), ConsoleColor.Red, prefix: "To clean:", suffix: "."); |
| 145 | } | 145 | } |
| 146 | - ColorConsole.WriteLine(" "); | 146 | + if (ws.Xml_OperationUnblockEnable) |
| 147 | + { | ||
| 148 | + ColorConsole.Write(ws.NumofSelectedCleaned.ToString(), ConsoleColor.Yellow, prefix: "Num of filtered files:"); | ||
| 149 | + } | ||
| 150 | + ColorConsole.WriteLine(" "); | ||
| 147 | return Menu.MenuItemDisplayerReturnValue.NEXTLINE; | 151 | return Menu.MenuItemDisplayerReturnValue.NEXTLINE; |
| 148 | } | 152 | } |
| 149 | else if (lineix == 1) | 153 | else if (lineix == 1) |
| @@ -194,13 +198,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | @@ -194,13 +198,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | ||
| 194 | ftc.SizeFolderTotal= 0; | 198 | ftc.SizeFolderTotal= 0; |
| 195 | ftc.SizeSelectedBeforeClean = 0; | 199 | ftc.SizeSelectedBeforeClean = 0; |
| 196 | ftc.SizeSelectedCleaned = 0; | 200 | ftc.SizeSelectedCleaned = 0; |
| 201 | + ftc.NumofSelectedCleaned = 0; | ||
| 197 | ftc.FolderExists = Directory.Exists(ftc.Xml_DirectoryPath); | 202 | ftc.FolderExists = Directory.Exists(ftc.Xml_DirectoryPath); |
| 198 | if (ftc.FolderExists) | 203 | if (ftc.FolderExists) |
| 199 | { | 204 | { |
| 200 | var di = new DirectoryInfo(ftc.Xml_DirectoryPath); | 205 | var di = new DirectoryInfo(ftc.Xml_DirectoryPath); |
| 201 | ftc.SizeFolderTotal = FileCleanerManagerCore.DirSize(di,"*","","",ftc.Xml_Recurse); | 206 | ftc.SizeFolderTotal = FileCleanerManagerCore.DirSize(di,"*","","",ftc.Xml_Recurse); |
| 202 | ftc.SizeSelectedBeforeClean = FileCleanerManagerCore.DirSize(di, ftc.Xml_IncludeMask,ftc.Xml_ExcludeMaskList, ftc.Xml_IncludeFullpathRegexp, ftc.Xml_Recurse); | 207 | ftc.SizeSelectedBeforeClean = FileCleanerManagerCore.DirSize(di, ftc.Xml_IncludeMask,ftc.Xml_ExcludeMaskList, ftc.Xml_IncludeFullpathRegexp, ftc.Xml_Recurse); |
| 203 | - ftc.SizeSelectedCleaned = FileCleanerManagerCore.CleanFolderFiles(di,ftc,enableexecute:false); | 208 | + var r = FileCleanerManagerCore.ProcessFolderFiles(FileCleanerManagerCore.FolderProcessingMode.GetInfo, di, ftc, recursionlevel: 0); |
| 209 | + ftc.SizeSelectedCleaned = r.Item2; | ||
| 210 | + ftc.NumofSelectedCleaned = r.Item1; | ||
| 204 | } | 211 | } |
| 205 | return ftc; | 212 | return ftc; |
| 206 | } | 213 | } |
| @@ -245,8 +252,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | @@ -245,8 +252,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | ||
| 245 | return size; | 252 | return size; |
| 246 | } | 253 | } |
| 247 | #endregion public GetDirSize | 254 | #endregion public GetDirSize |
| 248 | - #region public FileIsToDelete | ||
| 249 | - public static bool FileIsToDelete(FileInfo fi, FolderToClean ftc) | 255 | + #region public FileIsToProcess |
| 256 | + public static bool FileIsToProcess(FileInfo fi, FolderToClean ftc) | ||
| 250 | { | 257 | { |
| 251 | var rgx = new Regex(ftc.Xml_IncludeFullpathRegexp); | 258 | var rgx = new Regex(ftc.Xml_IncludeFullpathRegexp); |
| 252 | var rgxmatch = rgx.Match(fi.FullName); | 259 | var rgxmatch = rgx.Match(fi.FullName); |
| @@ -308,9 +315,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | @@ -308,9 +315,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | ||
| 308 | } | 315 | } |
| 309 | return false; | 316 | return false; |
| 310 | } | 317 | } |
| 311 | - #endregion public FileIsToDelete | ||
| 312 | - #region public UnblockMany,UnblockOne | ||
| 313 | - [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] | 318 | + #endregion public FileIsToProcess |
| 319 | + #region public UnblockMany,UnblockOne | ||
| 320 | + [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] | ||
| 314 | [return: MarshalAs(UnmanagedType.Bool)] | 321 | [return: MarshalAs(UnmanagedType.Bool)] |
| 315 | private static extern bool DeleteFile(string name); | 322 | private static extern bool DeleteFile(string name); |
| 316 | 323 | ||
| @@ -324,49 +331,80 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | @@ -324,49 +331,80 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | ||
| 324 | string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories); | 331 | string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories); |
| 325 | foreach (string file in files) { UnblockOne(file); } | 332 | foreach (string file in files) { UnblockOne(file); } |
| 326 | } | 333 | } |
| 327 | - #endregion public UnblockMany,UnblockOne | ||
| 328 | - #region public CleanFolderFiles | ||
| 329 | - public static long CleanFolderFiles(DirectoryInfo d,FolderToClean ftc, bool enableexecute) | 334 | + #endregion public UnblockMany,UnblockOne |
| 335 | + #region public ProcessFolderFiles | ||
| 336 | + public static (int,long) ProcessFolderFiles(FolderProcessingMode operation ,DirectoryInfo d,FolderToClean ftc, int recursionlevel) | ||
| 330 | { | 337 | { |
| 338 | + if (operation == FolderProcessingMode.GetInfo || ftc.Xml_OperationUnblockEnable && operation == FolderProcessingMode.UnblockFiles || ftc.Xml_OperationDeleteEnable && operation == FolderProcessingMode.DeleteFiles){ } | ||
| 339 | + else | ||
| 340 | + { | ||
| 341 | + ColorConsole.WriteLine("Function is not available for this folder!", ConsoleColor.Red); | ||
| 342 | + return (0,0); | ||
| 343 | + } | ||
| 344 | + const int MAXPRINTLENGTH = 100; | ||
| 345 | + const int MAXPRINTRECURSIONLEVEL = 2; | ||
| 346 | + | ||
| 347 | + Func<string,int,string> maxandpad = (text,w) => { return (text.Length <= w ? text : (text.Substring(0, w) + "...")).PadRight(w + 3, ' '); }; | ||
| 348 | + Action<string,bool,ConsoleColor?> printoneline = (text,linefeed,color) => | ||
| 349 | + { | ||
| 350 | + text = maxandpad(text, MAXPRINTLENGTH); | ||
| 351 | + if (color.HasValue) { ColorConsole.Write(text, color); } else { ColorConsole.Write(text); }; | ||
| 352 | + if (linefeed) { ColorConsole.WriteLine(); } else { ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); }; | ||
| 353 | + }; | ||
| 354 | + int filesprocessed = 0; | ||
| 331 | long cleanedsize = 0; | 355 | long cleanedsize = 0; |
| 332 | // Add file sizes. | 356 | // Add file sizes. |
| 333 | FileInfo[] fis = d.GetFiles(ftc.Xml_IncludeMask, SearchOption.TopDirectoryOnly); | 357 | FileInfo[] fis = d.GetFiles(ftc.Xml_IncludeMask, SearchOption.TopDirectoryOnly); |
| 334 | foreach (FileInfo fi in fis) | 358 | foreach (FileInfo fi in fis) |
| 335 | { | 359 | { |
| 336 | - if (FileIsToDelete(fi, ftc)) | 360 | + if (FileIsToProcess(fi, ftc)) |
| 337 | { | 361 | { |
| 338 | var fl = fi.Length; | 362 | var fl = fi.Length; |
| 339 | try | 363 | try |
| 340 | { | 364 | { |
| 341 | - if (Regex.Match(fi.Name, ZipTools.FileNameMaskListToRegex(ftc.Xml_ExcludeMaskList)).Success) continue; | ||
| 342 | - if (enableexecute) | 365 | + if (!string.IsNullOrEmpty(ftc.Xml_ExcludeMaskList) && Regex.Match(fi.Name, ZipTools.FileNameMaskListToRegex(ftc.Xml_ExcludeMaskList)).Success) continue; |
| 366 | + if (operation != FolderProcessingMode.GetInfo) | ||
| 343 | { | 367 | { |
| 344 | - if (ftc.Xml_OperationUnblockEnable) { UnblockOne(fi.FullName); } | ||
| 345 | - else if (ftc.Xml_OperationDeleteEnable) { System.IO.File.Delete(fi.FullName); } | ||
| 346 | - ColorConsole.Write(fi.FullName); ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); | 368 | + if (ftc.Xml_OperationUnblockEnable && operation == FolderProcessingMode.UnblockFiles) { UnblockOne(fi.FullName); } |
| 369 | + else if (ftc.Xml_OperationDeleteEnable && operation == FolderProcessingMode.DeleteFiles) { System.IO.File.Delete(fi.FullName); } | ||
| 370 | + printoneline(fi.FullName,false,null); | ||
| 347 | } | 371 | } |
| 372 | + filesprocessed++; | ||
| 348 | cleanedsize += fl; | 373 | cleanedsize += fl; |
| 349 | } | 374 | } |
| 350 | - catch { } | 375 | + catch (Exception ex) |
| 376 | + { | ||
| 377 | + Func<string> x = () => { var errmsg = ""; while (ex != null) { errmsg += ex.Message; ex = ex.InnerException; } return errmsg; }; | ||
| 378 | + ColorConsole.WriteLine(x(), ConsoleColor.Red); | ||
| 379 | + //string errmsg2 = (new Func<string>(() => { var errmsg = ""; while (ex != null) { errmsg += ex.Message; ex = ex.InnerException; } return errmsg; }))(); | ||
| 380 | + //ColorConsole.WriteLine(errmsg2, ConsoleColor.Red); | ||
| 381 | + } | ||
| 351 | } | 382 | } |
| 352 | } | 383 | } |
| 353 | // Add subdirectory sizes. | 384 | // Add subdirectory sizes. |
| 354 | if (ftc.Xml_Recurse) | 385 | if (ftc.Xml_Recurse) |
| 355 | { | 386 | { |
| 356 | - foreach (DirectoryInfo di in d.GetDirectories()) { cleanedsize += /*recursion*/ CleanFolderFiles(di, ftc, enableexecute); } | 387 | + foreach (DirectoryInfo di in d.GetDirectories()) |
| 388 | + { | ||
| 389 | + var r = /*recursion*/ ProcessFolderFiles(operation,di, ftc, recursionlevel+1); | ||
| 390 | + filesprocessed += r.Item1; | ||
| 391 | + cleanedsize += r.Item2; | ||
| 392 | + } | ||
| 357 | } | 393 | } |
| 358 | if (ftc.Xml_RemoveEmptyFolder && IsDirectoryEmpty(d)) | 394 | if (ftc.Xml_RemoveEmptyFolder && IsDirectoryEmpty(d)) |
| 359 | { | 395 | { |
| 360 | try { Directory.Delete(d.FullName, ftc.Xml_Recurse); } catch { } | 396 | try { Directory.Delete(d.FullName, ftc.Xml_Recurse); } catch { } |
| 361 | } | 397 | } |
| 362 | - return cleanedsize; | 398 | + 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); |
| 399 | + return (filesprocessed, cleanedsize); | ||
| 363 | } | 400 | } |
| 364 | - #endregion public CleanFolderFiles | ||
| 365 | - } | ||
| 366 | - #endregion class FileCleanerManagerCore | 401 | + public enum FolderProcessingMode { DeleteFiles, UnblockFiles, GetInfo, } |
| 402 | + #endregion public ProcessFolderFiles | ||
| 403 | + } | ||
| 404 | + #endregion class FileCleanerManagerCore | ||
| 367 | 405 | ||
| 368 | - #region FileCleanerManagerCoreXmlProcessor class | ||
| 369 | - public class FileCleanerManagerXmlProcessor : XmlParser | 406 | + #region FileCleanerManagerCoreXmlProcessor class |
| 407 | + public class FileCleanerManagerXmlProcessor : XmlParser | ||
| 370 | { | 408 | { |
| 371 | private List<FolderToClean> _foldertocleanlist; | 409 | private List<FolderToClean> _foldertocleanlist; |
| 372 | #region constructor | 410 | #region constructor |
| @@ -426,6 +464,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | @@ -426,6 +464,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS | ||
| 426 | public long SizeSelectedBeforeClean; | 464 | public long SizeSelectedBeforeClean; |
| 427 | public long SizeSelectedAfterClean { get { return SizeSelectedBeforeClean - SizeSelectedCleaned; } } | 465 | public long SizeSelectedAfterClean { get { return SizeSelectedBeforeClean - SizeSelectedCleaned; } } |
| 428 | public long SizeSelectedCleaned; | 466 | public long SizeSelectedCleaned; |
| 467 | + public long NumofSelectedCleaned; | ||
| 429 | 468 | ||
| 430 | public int? common_limitdays; | 469 | public int? common_limitdays; |
| 431 | public int? common_limitbytes; | 470 | public int? common_limitbytes; |
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
| @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; | @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; | ||
| 32 | // You can specify all the values or you can default the Build and Revision Numbers | 32 | // You can specify all the values or you can default the Build and Revision Numbers |
| 33 | // by using the '*' as shown below: | 33 | // by using the '*' as shown below: |
| 34 | // [assembly: AssemblyVersion("1.0.*")] | 34 | // [assembly: AssemblyVersion("1.0.*")] |
| 35 | -[assembly: AssemblyVersion("1.30.0.0")] | ||
| 36 | -[assembly: AssemblyFileVersion("1.30.0.0")] | 35 | +[assembly: AssemblyVersion("1.30.1.0")] |
| 36 | +[assembly: AssemblyFileVersion("1.30.1.0")] |