|
- using System;
- using System.IO;
- using UnifiedIO.SystemIO.Internal;
-
- namespace UnifiedIO
- {
- public static class Directory
- {
- public static bool Exists(string path)
- {
- path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
- return System.IO.Directory.Exists(path);
- }
-
- public static void Create(string path)
- {
- path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
- if (!System.IO.Directory.Exists(path))
- {
- System.IO.Directory.CreateDirectory(path);
- }
- }
-
- public static void Rename(string path, string newName)
- {
- path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
- if (newName.Contains("/") || newName.Contains("\\"))
- {
- throw new FileNotFoundException();
- }
- string directoryName = System.IO.Path.GetDirectoryName(path);
- try
- {
- System.IO.Directory.Move(path, System.IO.Path.Combine(directoryName, newName));
- }
- catch (DirectoryNotFoundException)
- {
- throw new FileNotFoundException();
- }
- }
-
- public static void Move(string sourcePath, string destinationPath)
- {
- sourcePath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(sourcePath);
- destinationPath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(destinationPath);
- if (!areSameDirectory(sourcePath, destinationPath) && !isSubdirectory(destinationPath, sourcePath))
- {
- if (!System.IO.Directory.Exists(destinationPath))
- {
- System.IO.Directory.CreateDirectory(destinationPath);
- }
- move(sourcePath, destinationPath);
- return;
- }
- throw new IOException();
- }
-
- public static void Copy(string sourcePath, string destinationPath)
- {
- sourcePath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(sourcePath);
- destinationPath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(destinationPath);
- if (!areSameDirectory(sourcePath, destinationPath) && !isSubdirectory(destinationPath, sourcePath))
- {
- if (!System.IO.Directory.Exists(destinationPath))
- {
- System.IO.Directory.CreateDirectory(destinationPath);
- }
- copy(sourcePath, destinationPath);
- return;
- }
- throw new IOException();
- }
-
- public static void MoveInside(string sourcePath, string destinationPath)
- {
- sourcePath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(sourcePath);
- destinationPath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(destinationPath);
- string fileName = System.IO.Path.GetFileName(sourcePath);
- string text = System.IO.Path.Combine(destinationPath, fileName);
- if (!areSameDirectory(sourcePath, text) && !isSubdirectory(text, sourcePath))
- {
- if (!System.IO.Directory.Exists(text))
- {
- System.IO.Directory.CreateDirectory(text);
- }
- move(sourcePath, text);
- return;
- }
- throw new IOException();
- }
-
- public static void CopyInside(string sourcePath, string destinationPath)
- {
- sourcePath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(sourcePath);
- destinationPath = UnifiedIO.SystemIO.Internal.Path.GetFullPath(destinationPath);
- string fileName = System.IO.Path.GetFileName(sourcePath);
- string text = System.IO.Path.Combine(destinationPath, fileName);
- if (!areSameDirectory(sourcePath, text) && !isSubdirectory(text, sourcePath))
- {
- if (!System.IO.Directory.Exists(text))
- {
- System.IO.Directory.CreateDirectory(text);
- }
- copy(sourcePath, text);
- return;
- }
- throw new IOException();
- }
-
- public static void Delete(string path)
- {
- path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
- if (System.IO.Directory.Exists(path))
- {
- System.IO.Directory.Delete(path, recursive: true);
- return;
- }
- FileNotFoundException ex = new FileNotFoundException("Unable to find the specified directory: " + path);
- throw ex;
- }
-
- public static void DeleteContents(string path)
- {
- path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
- string[] directories = System.IO.Directory.GetDirectories(path);
- foreach (string path2 in directories)
- {
- System.IO.Directory.Delete(path2, recursive: true);
- }
- string[] files = System.IO.Directory.GetFiles(path);
- foreach (string path3 in files)
- {
- System.IO.File.Delete(path3);
- }
- }
-
- public static string[] GetFiles(string path, string searchPattern = null, SearchOption searchOption = SearchOption.TopDirectoryOnly)
- {
- path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
- string[] array = (searchPattern == null) ? System.IO.Directory.GetFiles(path, "*", searchOption) : System.IO.Directory.GetFiles(path, searchPattern, searchOption);
- for (int i = 0; i < array.Length; i++)
- {
- array[i] = array[i].Substring(path.Length + 1, array[i].Length - path.Length - 1);
- }
- return array;
- }
-
- [Obsolete("Deprecated because it never actually returned an \"enumeration\". Please use GetFiles instead.")]
- public static string[] EnumerateFiles(string path, string searchPattern = null, SearchOption searchOption = SearchOption.TopDirectoryOnly)
- {
- return GetFiles(path, searchPattern, searchOption);
- }
-
- public static string[] GetDirectories(string path, string searchPattern = null, SearchOption searchOption = SearchOption.TopDirectoryOnly)
- {
- path = UnifiedIO.SystemIO.Internal.Path.GetFullPath(path);
- string[] array = (searchPattern == null) ? System.IO.Directory.GetDirectories(path, "*", searchOption) : System.IO.Directory.GetDirectories(path, searchPattern, searchOption);
- for (int i = 0; i < array.Length; i++)
- {
- array[i] = array[i].Substring(path.Length + 1, array[i].Length - path.Length - 1);
- }
- return array;
- }
-
- [Obsolete("Deprecated because it never actually returned an \"enumeration\". Please use GetDirectories instead.")]
- public static string[] EnumerateDirectories(string path, string searchPattern = null, SearchOption searchOption = SearchOption.TopDirectoryOnly)
- {
- return GetDirectories(path, searchPattern, searchOption);
- }
-
- private static void move(string sourcePath, string destinationPath)
- {
- string[] files = System.IO.Directory.GetFiles(sourcePath);
- string[] array = files;
- foreach (string text in array)
- {
- string fileName = System.IO.Path.GetFileName(text);
- string text2 = System.IO.Path.Combine(destinationPath, fileName);
- if (System.IO.File.Exists(text2))
- {
- System.IO.File.Delete(text2);
- }
- System.IO.File.Move(text, text2);
- }
- string[] directories = System.IO.Directory.GetDirectories(sourcePath);
- string[] array2 = directories;
- foreach (string text3 in array2)
- {
- string fileName2 = System.IO.Path.GetFileName(text3);
- string text4 = System.IO.Path.Combine(destinationPath, fileName2);
- if (!System.IO.Directory.Exists(text4))
- {
- System.IO.Directory.CreateDirectory(text4);
- }
- move(text3, text4);
- }
- if (isEmpty(sourcePath))
- {
- System.IO.Directory.Delete(sourcePath, recursive: true);
- }
- }
-
- private static void copy(string sourcePath, string destinationPath)
- {
- string[] files = System.IO.Directory.GetFiles(sourcePath);
- string[] array = files;
- foreach (string text in array)
- {
- string fileName = System.IO.Path.GetFileName(text);
- string text2 = System.IO.Path.Combine(destinationPath, fileName);
- if (System.IO.File.Exists(text2))
- {
- System.IO.File.Delete(text2);
- }
- System.IO.File.Copy(text, text2);
- }
- string[] directories = System.IO.Directory.GetDirectories(sourcePath);
- string[] array2 = directories;
- foreach (string text3 in array2)
- {
- string fileName2 = System.IO.Path.GetFileName(text3);
- string text4 = System.IO.Path.Combine(destinationPath, fileName2);
- if (!System.IO.Directory.Exists(text4))
- {
- System.IO.Directory.CreateDirectory(text4);
- }
- copy(text3, text4);
- }
- }
-
- private static bool areSameDirectory(string dir1, string dir2)
- {
- DirectoryInfo directoryInfo = new DirectoryInfo(dir1);
- DirectoryInfo directoryInfo2 = new DirectoryInfo(dir2);
- return directoryInfo2.Parent.FullName == directoryInfo.FullName;
- }
-
- private static bool isSubdirectory(string childCandidate, string parentCandidate)
- {
- DirectoryInfo directoryInfo = new DirectoryInfo(parentCandidate);
- DirectoryInfo directoryInfo2 = new DirectoryInfo(childCandidate);
- while (directoryInfo2.Parent != null)
- {
- if (directoryInfo2.Parent.FullName == directoryInfo.FullName)
- {
- return true;
- }
- directoryInfo2 = directoryInfo2.Parent;
- }
- return false;
- }
-
- private static bool isEmpty(string path)
- {
- return System.IO.Directory.GetFileSystemEntries(path).Length == 0;
- }
- }
- }
|