Program.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.Diagnostics;
  2. if (args.Length != 2)
  3. {
  4. Console.WriteLine("Err: 2 args required, <inputDir> <outputDir>");
  5. return 1;
  6. }
  7. var inputDir = args[0];
  8. var outputDir = args[1];
  9. if (!Directory.Exists(inputDir))
  10. {
  11. Console.WriteLine("Err: inputDir dose not exist");
  12. return 1;
  13. }
  14. if (!Directory.Exists(outputDir))
  15. {
  16. Console.WriteLine("Err: outputDir dose not exist");
  17. return 1;
  18. }
  19. Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Idle;
  20. var fullInputDir = Path.GetFullPath(inputDir);
  21. var fullOutputDir = Path.GetFullPath(outputDir);
  22. var filePathsToProcess = Directory.GetFiles(fullInputDir, "*", SearchOption.AllDirectories);
  23. void ProcessFunc(string inputFilePath)
  24. {
  25. var outputFilePath = Path.ChangeExtension(Path.Combine(fullOutputDir, inputFilePath[(fullInputDir.Length + 1)..]), ".webp");
  26. if (File.Exists(outputFilePath))
  27. {
  28. lock (Console.Out) Console.WriteLine("SKIP EXIST: " + outputFilePath);
  29. return;
  30. }
  31. var outputFileDir = Path.GetDirectoryName(outputFilePath);
  32. if (Directory.Exists(outputFileDir) == false)
  33. {
  34. lock (Console.Out) Console.WriteLine("Create dir: " + outputFileDir);
  35. Directory.CreateDirectory(outputFileDir);
  36. }
  37. var pWebp = new Process
  38. {
  39. StartInfo =
  40. {
  41. FileName = "cwebp",
  42. ArgumentList =
  43. {
  44. inputFilePath, "-o", outputFilePath , "-quiet"
  45. },
  46. UseShellExecute = false,
  47. CreateNoWindow = false,
  48. }
  49. };
  50. pWebp.Start();
  51. pWebp.WaitForExit();
  52. lock (Console.Out) Console.WriteLine($"PROCESS {pWebp.ExitCode} {outputFilePath}");
  53. if (pWebp.ExitCode != 0)
  54. {
  55. int bp = 0;
  56. }
  57. }
  58. Parallel.ForEach(filePathsToProcess, ProcessFunc);
  59. // for debug
  60. //foreach (var s in filePathsToProcess)
  61. //{
  62. // ProcessFunc(s);
  63. //}
  64. return 0;