DirectoryUtil.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. namespace Ips.Library.Basic
  6. {
  7. public static class DirectoryUtil
  8. {
  9. public static void CreateIfNotExists(string directory)
  10. {
  11. if (!Directory.Exists(directory))
  12. {
  13. Directory.CreateDirectory(directory);
  14. }
  15. }
  16. public static void DeleteIfExists(string directory)
  17. {
  18. if (Directory.Exists(directory))
  19. {
  20. Directory.Delete(directory, true);
  21. }
  22. }
  23. public static void DeleteIfExists(string directory, bool recursive)
  24. {
  25. if (Directory.Exists(directory))
  26. {
  27. Directory.Delete(directory, recursive);
  28. }
  29. }
  30. public static void DeleteIfEmpty(string directory)
  31. {
  32. if (Directory.Exists(directory) && !Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories).Any())
  33. {
  34. Directory.Delete(directory, true);
  35. }
  36. }
  37. public static bool DeleteFiles(string diretory, string searchPattern = "*", SearchOption searchOption = SearchOption.TopDirectoryOnly)
  38. {
  39. bool result = true;
  40. if (Directory.Exists(diretory))
  41. {
  42. var fileNames = Directory.GetFiles(diretory, searchPattern, searchOption);
  43. foreach (var fileName in fileNames)
  44. {
  45. try
  46. {
  47. File.Delete(fileName);
  48. }
  49. catch
  50. {
  51. result = false;
  52. }
  53. }
  54. }
  55. return result;
  56. }
  57. public static void CreateIfNotExists(DirectoryInfo directory)
  58. {
  59. if (!directory.Exists)
  60. {
  61. directory.Create();
  62. }
  63. }
  64. public static bool IsSubDirectoryOf(string parentDirectoryPath, string childDirectoryPath)
  65. {
  66. return IsSubDirectoryOf(
  67. new DirectoryInfo(parentDirectoryPath),
  68. new DirectoryInfo(childDirectoryPath)
  69. );
  70. }
  71. public static bool IsSubDirectoryOf(DirectoryInfo parentDirectory, DirectoryInfo childDirectory)
  72. {
  73. if (parentDirectory.FullName == childDirectory.FullName)
  74. {
  75. return true;
  76. }
  77. var parentOfChild = childDirectory.Parent;
  78. if (parentOfChild == null)
  79. {
  80. return false;
  81. }
  82. return IsSubDirectoryOf(parentDirectory, parentOfChild);
  83. }
  84. public static IDisposable ChangeCurrentDirectory(string targetDirectory)
  85. {
  86. var currentDirectory = Directory.GetCurrentDirectory();
  87. if (currentDirectory.Equals(targetDirectory, StringComparison.OrdinalIgnoreCase))
  88. {
  89. return NullDisposable.Instance;
  90. }
  91. Directory.SetCurrentDirectory(targetDirectory);
  92. return new DisposeAction(() => { Directory.SetCurrentDirectory(currentDirectory); });
  93. }
  94. }
  95. }