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")] |