Commit 32c3a93483a5a2126d831342139a67e18a3e4ef1

Authored by Schwirg László
1 parent 2a636a78

v1.30.1

- File cleaner/unblocker üzenet formátumok szépítgetése
Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs
... ... @@ -68,7 +68,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
68 68 else if (sr.Result == Menu.SelectionResult.Error) { return o; }
69 69 else if (sr.Result == Menu.SelectionResult.Ok) { }
70 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 72 return o;
73 73 }
74 74 private static object FolderClean(object parameter, object o)
... ... @@ -86,16 +86,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
86 86 else if (sr.Result == Menu.SelectionResult.Error) { return o; }
87 87 else if (sr.Result == Menu.SelectionResult.Ok) { }
88 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 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 94 try
95 95 {
96 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 100 catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); }
101 101 }
... ... @@ -137,13 +137,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
137 137 var operationcolor = ws.Xml_OperationUnblockEnable ? ConsoleColor.Yellow : ws.Xml_OperationDeleteEnable ? ConsoleColor.Red : ConsoleColor.Green;
138 138 var removeemptyfoldertext = ws.Xml_RemoveEmptyFolder ? " with remove empty folders" : "";
139 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 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 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 151 return Menu.MenuItemDisplayerReturnValue.NEXTLINE;
148 152 }
149 153 else if (lineix == 1)
... ... @@ -194,13 +198,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
194 198 ftc.SizeFolderTotal= 0;
195 199 ftc.SizeSelectedBeforeClean = 0;
196 200 ftc.SizeSelectedCleaned = 0;
  201 + ftc.NumofSelectedCleaned = 0;
197 202 ftc.FolderExists = Directory.Exists(ftc.Xml_DirectoryPath);
198 203 if (ftc.FolderExists)
199 204 {
200 205 var di = new DirectoryInfo(ftc.Xml_DirectoryPath);
201 206 ftc.SizeFolderTotal = FileCleanerManagerCore.DirSize(di,"*","","",ftc.Xml_Recurse);
202 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 212 return ftc;
206 213 }
... ... @@ -245,8 +252,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
245 252 return size;
246 253 }
247 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 258 var rgx = new Regex(ftc.Xml_IncludeFullpathRegexp);
252 259 var rgxmatch = rgx.Match(fi.FullName);
... ... @@ -308,9 +315,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
308 315 }
309 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 321 [return: MarshalAs(UnmanagedType.Bool)]
315 322 private static extern bool DeleteFile(string name);
316 323  
... ... @@ -324,49 +331,80 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
324 331 string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories);
325 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 355 long cleanedsize = 0;
332 356 // Add file sizes.
333 357 FileInfo[] fis = d.GetFiles(ftc.Xml_IncludeMask, SearchOption.TopDirectoryOnly);
334 358 foreach (FileInfo fi in fis)
335 359 {
336   - if (FileIsToDelete(fi, ftc))
  360 + if (FileIsToProcess(fi, ftc))
337 361 {
338 362 var fl = fi.Length;
339 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 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 384 // Add subdirectory sizes.
354 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 394 if (ftc.Xml_RemoveEmptyFolder && IsDirectoryEmpty(d))
359 395 {
360 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 409 private List<FolderToClean> _foldertocleanlist;
372 410 #region constructor
... ... @@ -426,6 +464,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
426 464 public long SizeSelectedBeforeClean;
427 465 public long SizeSelectedAfterClean { get { return SizeSelectedBeforeClean - SizeSelectedCleaned; } }
428 466 public long SizeSelectedCleaned;
  467 + public long NumofSelectedCleaned;
429 468  
430 469 public int? common_limitdays;
431 470 public int? common_limitbytes;
... ...
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
... ... @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 32 // You can specify all the values or you can default the Build and Revision Numbers
33 33 // by using the '*' as shown below:
34 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")]
... ...