using System; using System.IO; namespace SPT_AKI_Installer.Aki.Helper { public static class FileHelper { /// /// CopyDirectory will use old path and copy to new path and /// asks if inner files/folders should be included /// /// public static void CopyDirectory(string oldDir, string newDir, bool recursive) { var dir = new DirectoryInfo(oldDir); if (!dir.Exists) throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}"); DirectoryInfo[] dirs = dir.GetDirectories(); Directory.CreateDirectory(newDir); foreach (FileInfo file in dir.GetFiles()) { string targetFilePath = Path.Combine(newDir, file.Name); file.CopyTo(targetFilePath, true); } if (recursive) { foreach (DirectoryInfo subDir in dirs) { string newDestinationDir = Path.Combine(newDir, subDir.Name); CopyDirectory(subDir.FullName, newDestinationDir, true); } } } /// /// DeleteFiles will use a type to look for, the path /// and if all inner files/folders should be included /// /// /// Types are "file" or "folder" as a string /// public static void DeleteFile(string type, string filePath, bool allFolders = false) { // type = "file" or "folder" if (string.Equals(type, "file", StringComparison.OrdinalIgnoreCase)) { File.Delete(filePath); } if (string.Equals(type, "folder", StringComparison.OrdinalIgnoreCase)) { Directory.Delete(filePath, allFolders); } } /// /// finds file based on Path and File name /// /// /// /// String or null public static string FindFile(string path, string name) { string[] filePaths = Directory.GetFiles(path); foreach (string file in filePaths) { if (file.Contains(name)) { return file; } } return null; } /// /// Finds folder with name supplied, out = directory for extracted patch folder /// /// /// /// bool public static bool FindFolder(string patchRef, string targetPath, out DirectoryInfo dir) { var patchInfo = new FileInfo(patchRef); var patchName = patchInfo.Name.Replace(patchInfo.Extension, ""); var path = new DirectoryInfo(Path.Join(targetPath, patchName)); if (path.Exists) { dir = path; return true; } dir = null; return false; } } }