You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

259 line
11 KiB

  1. using System;
  2. using System.IO;
  3. using UnifiedIO.SystemIO.Internal;
  4. namespace UnifiedIO
  5. {
  6. public static class Directory
  7. {
  8. public static bool Exists(string path)
  9. {
  10. path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
  11. return System.IO.Directory.Exists(path);
  12. }
  13. public static void Create(string path)
  14. {
  15. path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
  16. if (!System.IO.Directory.Exists(path))
  17. {
  18. System.IO.Directory.CreateDirectory(path);
  19. }
  20. }
  21. public static void Rename(string path, string newName)
  22. {
  23. path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
  24. if (newName.Contains("/") || newName.Contains("\\"))
  25. {
  26. throw new FileNotFoundException();
  27. }
  28. string directoryName = System.IO.Path.GetDirectoryName(path);
  29. try
  30. {
  31. System.IO.Directory.Move(path, System.IO.Path.Combine(directoryName, newName));
  32. }
  33. catch (DirectoryNotFoundException)
  34. {
  35. throw new FileNotFoundException();
  36. }
  37. }
  38. public static void Move(string sourcePath, string destinationPath)
  39. {
  40. sourcePath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(sourcePath);
  41. destinationPath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(destinationPath);
  42. if (!areSameDirectory(sourcePath, destinationPath) && !isSubdirectory(destinationPath, sourcePath))
  43. {
  44. if (!System.IO.Directory.Exists(destinationPath))
  45. {
  46. System.IO.Directory.CreateDirectory(destinationPath);
  47. }
  48. move(sourcePath, destinationPath);
  49. return;
  50. }
  51. throw new IOException();
  52. }
  53. public static void Copy(string sourcePath, string destinationPath)
  54. {
  55. sourcePath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(sourcePath);
  56. destinationPath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(destinationPath);
  57. if (!areSameDirectory(sourcePath, destinationPath) && !isSubdirectory(destinationPath, sourcePath))
  58. {
  59. if (!System.IO.Directory.Exists(destinationPath))
  60. {
  61. System.IO.Directory.CreateDirectory(destinationPath);
  62. }
  63. copy(sourcePath, destinationPath);
  64. return;
  65. }
  66. throw new IOException();
  67. }
  68. public static void MoveInside(string sourcePath, string destinationPath)
  69. {
  70. sourcePath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(sourcePath);
  71. destinationPath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(destinationPath);
  72. string fileName = System.IO.Path.GetFileName(sourcePath);
  73. string text = System.IO.Path.Combine(destinationPath, fileName);
  74. if (!areSameDirectory(sourcePath, text) && !isSubdirectory(text, sourcePath))
  75. {
  76. if (!System.IO.Directory.Exists(text))
  77. {
  78. System.IO.Directory.CreateDirectory(text);
  79. }
  80. move(sourcePath, text);
  81. return;
  82. }
  83. throw new IOException();
  84. }
  85. public static void CopyInside(string sourcePath, string destinationPath)
  86. {
  87. sourcePath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(sourcePath);
  88. destinationPath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(destinationPath);
  89. string fileName = System.IO.Path.GetFileName(sourcePath);
  90. string text = System.IO.Path.Combine(destinationPath, fileName);
  91. if (!areSameDirectory(sourcePath, text) && !isSubdirectory(text, sourcePath))
  92. {
  93. if (!System.IO.Directory.Exists(text))
  94. {
  95. System.IO.Directory.CreateDirectory(text);
  96. }
  97. copy(sourcePath, text);
  98. return;
  99. }
  100. throw new IOException();
  101. }
  102. public static void Delete(string path)
  103. {
  104. path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
  105. if (System.IO.Directory.Exists(path))
  106. {
  107. System.IO.Directory.Delete(path, recursive: true);
  108. return;
  109. }
  110. FileNotFoundException ex = new FileNotFoundException("Unable to find the specified directory: " + path);
  111. throw ex;
  112. }
  113. public static void DeleteContents(string path)
  114. {
  115. path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
  116. string[] directories = System.IO.Directory.GetDirectories(path);
  117. foreach (string path2 in directories)
  118. {
  119. System.IO.Directory.Delete(path2, recursive: true);
  120. }
  121. string[] files = System.IO.Directory.GetFiles(path);
  122. foreach (string path3 in files)
  123. {
  124. System.IO.File.Delete(path3);
  125. }
  126. }
  127. public static string[] GetFiles(string path, string searchPattern = null, SearchOption searchOption = SearchOption.TopDirectoryOnly)
  128. {
  129. path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
  130. string[] array = (searchPattern == null) ? System.IO.Directory.GetFiles(path, "*", searchOption) : System.IO.Directory.GetFiles(path, searchPattern, searchOption);
  131. for (int i = 0; i < array.Length; i++)
  132. {
  133. array[i] = array[i].Substring(path.Length + 1, array[i].Length - path.Length - 1);
  134. }
  135. return array;
  136. }
  137. [Obsolete("Deprecated because it never actually returned an \"enumeration\". Please use GetFiles instead.")]
  138. public static string[] EnumerateFiles(string path, string searchPattern = null, SearchOption searchOption = SearchOption.TopDirectoryOnly)
  139. {
  140. return GetFiles(path, searchPattern, searchOption);
  141. }
  142. public static string[] GetDirectories(string path, string searchPattern = null, SearchOption searchOption = SearchOption.TopDirectoryOnly)
  143. {
  144. path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
  145. string[] array = (searchPattern == null) ? System.IO.Directory.GetDirectories(path, "*", searchOption) : System.IO.Directory.GetDirectories(path, searchPattern, searchOption);
  146. for (int i = 0; i < array.Length; i++)
  147. {
  148. array[i] = array[i].Substring(path.Length + 1, array[i].Length - path.Length - 1);
  149. }
  150. return array;
  151. }
  152. [Obsolete("Deprecated because it never actually returned an \"enumeration\". Please use GetDirectories instead.")]
  153. public static string[] EnumerateDirectories(string path, string searchPattern = null, SearchOption searchOption = SearchOption.TopDirectoryOnly)
  154. {
  155. return GetDirectories(path, searchPattern, searchOption);
  156. }
  157. private static void move(string sourcePath, string destinationPath)
  158. {
  159. string[] files = System.IO.Directory.GetFiles(sourcePath);
  160. string[] array = files;
  161. foreach (string text in array)
  162. {
  163. string fileName = System.IO.Path.GetFileName(text);
  164. string text2 = System.IO.Path.Combine(destinationPath, fileName);
  165. if (System.IO.File.Exists(text2))
  166. {
  167. System.IO.File.Delete(text2);
  168. }
  169. System.IO.File.Move(text, text2);
  170. }
  171. string[] directories = System.IO.Directory.GetDirectories(sourcePath);
  172. string[] array2 = directories;
  173. foreach (string text3 in array2)
  174. {
  175. string fileName2 = System.IO.Path.GetFileName(text3);
  176. string text4 = System.IO.Path.Combine(destinationPath, fileName2);
  177. if (!System.IO.Directory.Exists(text4))
  178. {
  179. System.IO.Directory.CreateDirectory(text4);
  180. }
  181. move(text3, text4);
  182. }
  183. if (isEmpty(sourcePath))
  184. {
  185. System.IO.Directory.Delete(sourcePath, recursive: true);
  186. }
  187. }
  188. private static void copy(string sourcePath, string destinationPath)
  189. {
  190. string[] files = System.IO.Directory.GetFiles(sourcePath);
  191. string[] array = files;
  192. foreach (string text in array)
  193. {
  194. string fileName = System.IO.Path.GetFileName(text);
  195. string text2 = System.IO.Path.Combine(destinationPath, fileName);
  196. if (System.IO.File.Exists(text2))
  197. {
  198. System.IO.File.Delete(text2);
  199. }
  200. System.IO.File.Copy(text, text2);
  201. }
  202. string[] directories = System.IO.Directory.GetDirectories(sourcePath);
  203. string[] array2 = directories;
  204. foreach (string text3 in array2)
  205. {
  206. string fileName2 = System.IO.Path.GetFileName(text3);
  207. string text4 = System.IO.Path.Combine(destinationPath, fileName2);
  208. if (!System.IO.Directory.Exists(text4))
  209. {
  210. System.IO.Directory.CreateDirectory(text4);
  211. }
  212. copy(text3, text4);
  213. }
  214. }
  215. private static bool areSameDirectory(string dir1, string dir2)
  216. {
  217. DirectoryInfo directoryInfo = new DirectoryInfo(dir1);
  218. DirectoryInfo directoryInfo2 = new DirectoryInfo(dir2);
  219. return directoryInfo2.Parent.FullName == directoryInfo.FullName;
  220. }
  221. private static bool isSubdirectory(string childCandidate, string parentCandidate)
  222. {
  223. DirectoryInfo directoryInfo = new DirectoryInfo(parentCandidate);
  224. DirectoryInfo directoryInfo2 = new DirectoryInfo(childCandidate);
  225. while (directoryInfo2.Parent != null)
  226. {
  227. if (directoryInfo2.Parent.FullName == directoryInfo.FullName)
  228. {
  229. return true;
  230. }
  231. directoryInfo2 = directoryInfo2.Parent;
  232. }
  233. return false;
  234. }
  235. private static bool isEmpty(string path)
  236. {
  237. return System.IO.Directory.GetFileSystemEntries(path).Length == 0;
  238. }
  239. }
  240. }