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