using Core.Models.Utils; using SptCommon.Annotations; namespace Core.Utils; [Injectable] public class FileUtil( ISptLogger _logger) { public List GetFiles(string path, bool recursive = false) { var files = new List(Directory.GetFiles(path)); if (recursive) files.AddRange(Directory.GetDirectories(path).SelectMany(d => GetFiles(d, recursive))); return files; } public string[] GetDirectories(string path) { return Directory.GetDirectories(path); } public string GetFileExtension(string path) { return Path.GetExtension(path).Replace(".", ""); } public string GetFileNameAndExtension(string path) { return Path.GetFileName(path); } public string StripExtension(string path, bool keepPath = false) { if (keepPath) return path.StartsWith(".") ? path.Split('.')[1] : path.Split('.').First(); return Path.GetFileNameWithoutExtension(path); } public bool DirectoryExists(string path) { return Directory.Exists(path); } public DirectoryInfo CreateDirectory(string path) { return Directory.CreateDirectory(path); } public bool FileExists(string path) { return File.Exists(path); } public string ReadFile(string path) { using var reader = new StreamReader(path); return reader.ReadToEnd(); } public void WriteFile(string filePath, string fileContent) { if (!FileExists(filePath)) CreateFile(filePath); File.WriteAllText(filePath, fileContent); } private void CreateFile(string filePath) { var stream = File.Create(filePath); stream.Close(); } public void DeleteFile(string filePath) { if (!FileExists(filePath)) { _logger.Error($"Unable to delete file, not found: {filePath}"); return; } File.Delete(filePath); } /// /// Copy a file from one path to another /// /// Source file to copy from /// /// Should destination file be overwritten public void CopyFile(string copyFromPath, string destinationFilePath, bool overwrite = false) { // Check it exists first if (!FileExists(copyFromPath)) _logger.Error($"Source file not found: {copyFromPath}. Cannot copy to: {destinationFilePath}"); // Ensure dir exists Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath)); // Copy the file File.Copy(copyFromPath, destinationFilePath, overwrite); } /// /// Delete a directory, must be empty unless 'deleteContent' is set to 'true' /// /// /// public void DeleteDirectory(string directory, bool deleteContent = false) { Directory.Delete(directory, deleteContent); } }