ProcessFiles.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. namespace ProcessFiles
  6. {
  7. public static class ProcessFiles
  8. {
  9. private static List<string> _errors;
  10. private static void ProcessDir(string path, string fileExtension, Action<string> callback, bool recursive = false)
  11. {
  12. var searchOption = SearchOption.TopDirectoryOnly;
  13. if (recursive)
  14. searchOption = SearchOption.AllDirectories;
  15. var files = Directory.GetFiles(path, $"*.{fileExtension}", searchOption);
  16. if (!files.Any())
  17. {
  18. _errors.Add($"There are no {fileExtension} files in {path}!");
  19. return;
  20. }
  21. foreach (var file in files)
  22. callback(file);
  23. }
  24. private static bool CheckForFile(string argument, string fileExtension, Action<string> callback)
  25. {
  26. if (!File.Exists(argument))
  27. return false;
  28. var extension = Path.GetExtension(argument);
  29. if (string.IsNullOrWhiteSpace(extension))
  30. {
  31. _errors.Add($"Can't establish extension of {argument}!");
  32. return false;
  33. }
  34. if (!extension.Equals($".{fileExtension}"))
  35. {
  36. _errors.Add($"Extension of {argument} doesn't match {fileExtension}!");
  37. return false;
  38. }
  39. callback(argument);
  40. return true;
  41. }
  42. public static IEnumerable<string> Process(IEnumerable<string> arguments, string fileExtension, Action<string> callback, bool recursive = false)
  43. {
  44. _errors = new List<string>();
  45. foreach (var argument in arguments)
  46. {
  47. if (CheckForFile(argument, fileExtension, callback))
  48. continue;
  49. if (!Directory.Exists(argument))
  50. {
  51. _errors.Add($"{argument} is neither file nor directory!");
  52. continue;
  53. }
  54. ProcessDir(argument, fileExtension, callback, recursive);
  55. }
  56. return _errors;
  57. }
  58. }
  59. }