using System; using System.IO; using Spectre.Console; namespace SPT_AKI_Installer.Aki.Helper { public static class FileHelper { public static void CopyDirectory(string oldDir, string newDir, bool overwrite) { int totalFiles = Directory.GetFiles(oldDir, "*.*", SearchOption.AllDirectories).Length; AnsiConsole.Progress().Columns( new PercentageColumn(), new TaskDescriptionColumn(), new ProgressBarColumn(), new ElapsedTimeColumn(), new SpinnerColumn() ).Start((ProgressContext context) => { var task = context.AddTask("Copying Files", true, totalFiles); foreach (string dirPath in Directory.GetDirectories(oldDir, "*", SearchOption.AllDirectories)) { Directory.CreateDirectory(dirPath.Replace(oldDir, newDir)); } foreach (string newPath in Directory.GetFiles(oldDir, "*.*", SearchOption.AllDirectories)) { File.Copy(newPath, newPath.Replace(oldDir, newDir), overwrite); task.Increment(1); } }); } public static void DeleteFiles(string filePath, bool allFolders = false) { if (filePath.Contains('.')) { File.Delete(filePath); } else { Directory.Delete(filePath, allFolders); } } 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; } public static string FindFile(string path, string name, string altName) { string[] filePaths = Directory.GetFiles(path); foreach (string file in filePaths) { if (file.Contains(name, StringComparison.OrdinalIgnoreCase) && file.Contains(altName, StringComparison.OrdinalIgnoreCase)) { return file; } } return null; } public static bool FindFolder(string patchRef, string targetPath, out DirectoryInfo dir) { var dirInfo = new DirectoryInfo(targetPath).GetDirectories(); string patchInner = null; foreach (var file in dirInfo) { if (file.FullName.Contains("patcher", StringComparison.OrdinalIgnoreCase)) { patchInner = file.FullName; } } var path = new DirectoryInfo(patchInner); if (path.Exists) { dir = path; return true; } dir = null; return false; } } }