149 lines
5.2 KiB
C#
149 lines
5.2 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.IO;
|
|
using System.Runtime.Serialization.Formatters.Binary;
|
|
using Directory = System.IO.Directory;
|
|
using File = System.IO.File;
|
|
|
|
|
|
namespace PerformanceSolution.Tools
|
|
{
|
|
/// <summary>
|
|
/// Allows the save and load of objects in a specific folder and file.
|
|
/// </summary>
|
|
public static class SaveLoadManager
|
|
{
|
|
private static readonly string _baseFolderName = Path.DirectorySeparatorChar + "BMData";
|
|
private const string _defaultFolderName = "BlueWest";
|
|
|
|
/// <summary>
|
|
/// Determines the save path to use when loading and saving a file based on a folder name.
|
|
/// </summary>
|
|
/// <returns>The save path.</returns>
|
|
/// <param name="folderName">Folder name.</param>
|
|
static string DetermineSavePath(string folderName = _defaultFolderName)
|
|
{
|
|
string savePath;
|
|
// depending on the device we're on, we assemble the path
|
|
|
|
//savePath = OS.GetUserDataDir() + "/";
|
|
|
|
savePath = Path.Combine(Environment.GetFolderPath(
|
|
Environment.SpecialFolder.ApplicationData));
|
|
|
|
// #if UNITY_EDITOR
|
|
// savePath = Application.dataPath + _baseFolderName;
|
|
// #endif
|
|
|
|
var pathSeparator = Path.DirectorySeparatorChar;
|
|
|
|
savePath = savePath + pathSeparator + folderName + pathSeparator;
|
|
return savePath;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Determines the name of the file to save
|
|
/// </summary>
|
|
/// <returns>The save file name.</returns>
|
|
/// <param name="fileName">File name.</param>
|
|
static string DetermineSaveFileName(string fileName)
|
|
{
|
|
return fileName + ".binary";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Save the specified saveObject, fileName and foldername into a file on disk.
|
|
/// </summary>
|
|
/// <param name="saveObject">Save object.</param>
|
|
/// <param name="fileName">File name.</param>
|
|
/// <param name="foldername">Foldername.</param>
|
|
public static void Save<T>(T saveObject, string fileName, string foldername = _defaultFolderName)
|
|
where T : class
|
|
{
|
|
string savePath = DetermineSavePath(foldername);
|
|
string saveFileName = DetermineSaveFileName(fileName);
|
|
// if the directory doesn't already exist, we create it
|
|
if (!Directory.Exists(savePath))
|
|
{
|
|
Directory.CreateDirectory(savePath);
|
|
}
|
|
|
|
// we serialize and write our object into a file on disk
|
|
//var byteData = MessagePackSerializer.Serialize(saveObject);
|
|
|
|
|
|
File.WriteAllText(savePath + saveFileName + ".json", saveObject.ToString());
|
|
|
|
//File.WriteAllBytes(savePath + saveFileName, byteData);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Load the specified file based on a file name into a specified folder
|
|
/// </summary>
|
|
/// <param name="fileName">File name.</param>
|
|
/// <param name="foldername">Foldername.</param>
|
|
public static T Load<T>(string fileName, string foldername = _defaultFolderName) where T : class
|
|
{
|
|
string savePath = DetermineSavePath(foldername);
|
|
string saveFileName = savePath + DetermineSaveFileName(fileName);
|
|
|
|
object returnObject;
|
|
|
|
// if the MMSaves directory or the save file doesn't exist, there's nothing to load, we do nothing and exit
|
|
if (!Directory.Exists(savePath) || !File.Exists(saveFileName))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
byte[] readByte = File.ReadAllBytes(saveFileName);
|
|
|
|
//var finalObject = MessagePackSerializer.Deserialize<T>(readByte);
|
|
|
|
//return finalObject;
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Removes a save from disk
|
|
/// </summary>
|
|
/// <param name="fileName">File name.</param>
|
|
/// <param name="folderName">Folder name.</param>
|
|
public static void DeleteSave(string fileName, string folderName = _defaultFolderName)
|
|
{
|
|
string savePath = DetermineSavePath(folderName);
|
|
string saveFileName = DetermineSaveFileName(fileName);
|
|
if (File.Exists(savePath + saveFileName))
|
|
{
|
|
File.Delete(savePath + saveFileName);
|
|
}
|
|
}
|
|
|
|
public static void DeleteSaveFolder(string folderName = _defaultFolderName)
|
|
{
|
|
string savePath = DetermineSavePath(folderName);
|
|
if (Directory.Exists(savePath))
|
|
{
|
|
DeleteDirectory(savePath);
|
|
}
|
|
}
|
|
|
|
public static void DeleteDirectory(string target_dir)
|
|
{
|
|
string[] files = Directory.GetFiles(target_dir);
|
|
string[] dirs = Directory.GetDirectories(target_dir);
|
|
|
|
foreach (string file in files)
|
|
{
|
|
File.SetAttributes(file, FileAttributes.Normal);
|
|
File.Delete(file);
|
|
}
|
|
|
|
foreach (string dir in dirs)
|
|
{
|
|
DeleteDirectory(dir);
|
|
}
|
|
|
|
Directory.Delete(target_dir, false);
|
|
}
|
|
}
|
|
} |