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