using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text; using Newtonsoft.Json; namespace PixiEditorDotNetCore3.Models { public static class PixiFilesManager { public static string TempFolderPath { get { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"PixiEditor\Temp"); } } public static string RedoStackPath { get { return Path.Combine(TempFolderPath, @"RedoStack"); } } public static string UndoStackPath { get { return Path.Combine(TempFolderPath, @"UndoStack"); } } /// /// Saves object to file on disk using binary formatter /// /// Object to be saved public static void SaveObjectToJsonFile(T obj, string fileName) where T : new() { try { SaveSerializedObjectToFile(obj, fileName); } catch (IOException ex) { Debug.WriteLine(ex.Message); } } public static void RemoveFile(string path) { File.Delete(path); } /// /// Removes all files from directory /// /// public static void ClearDirectory(string path) { string[] filesInDirectory = Directory.GetFiles(path); for (int i = 0; i < filesInDirectory.Length; i++) { File.Delete(filesInDirectory[i]); } } private static void SaveSerializedObjectToFile(object obj, string filename) { using (TextWriter writer = new StreamWriter(filename, false)) { var contentsToWriteToFile = JsonConvert.SerializeObject(obj); writer.Write(contentsToWriteToFile); } } public static T ReadObjectFromFile(string filePath) where T : new() { using (TextReader reader = new StreamReader(filePath)) { var fileContent = reader.ReadToEnd(); return JsonConvert.DeserializeObject(fileContent); } } /// /// Creates and cleares temp directories /// public static void InitializeTempDirectories() { CreateTempDirectories(); ClearTempDirectoriesContent(); } private static void CreateTempDirectories() { Directory.CreateDirectory(TempFolderPath); Directory.CreateDirectory(Path.Combine(TempFolderPath, "UndoStack")); Directory.CreateDirectory(Path.Combine(TempFolderPath, "RedoStack")); } public static void ClearTempDirectoriesContent() { ClearDirectory(RedoStackPath); ClearDirectory(UndoStackPath); } } }