using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using UnityEngine; namespace TcgEngine { /// /// Script to write a class to the disk, or to read a file containing class from the disk /// [System.Serializable] public class SaveTool { //Load any file to a class, make sure the class is marked with [System.Serializable] public static T LoadFile(string filename) where T : class { T data = null; string fullpath = Application.persistentDataPath + "/" + filename; if (IsValidFilename(filename) && File.Exists(fullpath)) { FileStream file = null; try { BinaryFormatter bf = new BinaryFormatter(); file = File.Open(fullpath, FileMode.Open); data = (T)bf.Deserialize(file); file.Close(); } catch (System.Exception e) { Debug.Log("Error Loading Data " + e); if (file != null) file.Close(); } } return data; } //Save any class to a file, make sure the class is marked with [System.Serializable] public static void SaveFile(string filename, T data) where T : class { if (IsValidFilename(filename)) { FileStream file = null; try { BinaryFormatter bf = new BinaryFormatter(); string fullpath = Application.persistentDataPath + "/" + filename; file = File.Create(fullpath); bf.Serialize(file, data); file.Close(); } catch (System.Exception e) { Debug.Log("Error Saving Data " + e); if (file != null) file.Close(); } } } public static void DeleteFile(string filename) { string fullpath = Application.persistentDataPath + "/" + filename; if (File.Exists(fullpath)) File.Delete(fullpath); } //Return all save files public static List GetAllSave(string extension = "") { List saves = new List(); string[] files = Directory.GetFiles(Application.persistentDataPath); foreach (string file in files) { if (file.EndsWith(extension)) { string filename = Path.GetFileName(file); if (!saves.Contains(filename)) saves.Add(filename); } } return saves; } public static bool DoesFileExist(string filename) { string fullpath = Application.persistentDataPath + "/" + filename; return IsValidFilename(filename) && File.Exists(fullpath); } public static bool IsValidFilename(string filename) { if (string.IsNullOrWhiteSpace(filename)) return false; //Filename cant be blank foreach (char c in Path.GetInvalidFileNameChars()) { if (filename.Contains(c.ToString())) return false; //Dont allow any special characters } return true; } } }