using System; using System.Collections.Generic; using System.IO; using System.Text; namespace Ips.Library.Basic { public static class DirectoryUtil { public static void CreateIfNotExists(string directory) { if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } } public static void DeleteIfExists(string directory) { if (Directory.Exists(directory)) { Directory.Delete(directory, true); } } public static void DeleteIfExists(string directory, bool recursive) { if (Directory.Exists(directory)) { Directory.Delete(directory, recursive); } } public static void DeleteIfEmpty(string directory) { if (Directory.Exists(directory) && !Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories).Any()) { Directory.Delete(directory, true); } } public static bool DeleteFiles(string diretory, string searchPattern = "*", SearchOption searchOption = SearchOption.TopDirectoryOnly) { bool result = true; if (Directory.Exists(diretory)) { var fileNames = Directory.GetFiles(diretory, searchPattern, searchOption); foreach (var fileName in fileNames) { try { File.Delete(fileName); } catch { result = false; } } } return result; } public static void CreateIfNotExists(DirectoryInfo directory) { if (!directory.Exists) { directory.Create(); } } public static bool IsSubDirectoryOf(string parentDirectoryPath, string childDirectoryPath) { return IsSubDirectoryOf( new DirectoryInfo(parentDirectoryPath), new DirectoryInfo(childDirectoryPath) ); } public static bool IsSubDirectoryOf(DirectoryInfo parentDirectory, DirectoryInfo childDirectory) { if (parentDirectory.FullName == childDirectory.FullName) { return true; } var parentOfChild = childDirectory.Parent; if (parentOfChild == null) { return false; } return IsSubDirectoryOf(parentDirectory, parentOfChild); } public static IDisposable ChangeCurrentDirectory(string targetDirectory) { var currentDirectory = Directory.GetCurrentDirectory(); if (currentDirectory.Equals(targetDirectory, StringComparison.OrdinalIgnoreCase)) { return NullDisposable.Instance; } Directory.SetCurrentDirectory(targetDirectory); return new DisposeAction(() => { Directory.SetCurrentDirectory(currentDirectory); }); } } }