- Home /
Delete a serialized binary save file
So I haven't had much trouble creating and loading save data, but for some reason, I'm having a really hard time trying to delete it. I honestly don't know the proper way to go about this. Right now I have to delete all the save files in order to free up any save slots. No one else seems to have this issue, or at least I haven't seen anyone ask a question on this or create a tutorial. This is probably a dumb question, but any help would be great! Thank you!
This is the basic class I'm using.
[System.Serializable]
public class State
{
public static State current;
public string name;
public int date;
public int punkLevel;
public int gamerLevel;
public int raveLevel;
public List<float> events = new List<float>();
public bool bossDefeated;
}
This is the save/load file.
public static class SaveLoad
{
public static List<State> savedGames = new List<State>();
public static void Save()
{
savedGames.Add(State.current);
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Path.Combine(Application.persistentDataPath, "/savedGames.sx"));
bf.Serialize(file, SaveLoad.savedGames);
file.Close();
}
public static void Load()
{
if(File.Exists(Path.Combine(Application.persistentDataPath, "/savedGames.sx")))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Path.Combine(Application.persistentDataPath, "/savedGames.sx"), FileMode.Open);
SaveLoad.savedGames = (List<State>)bf.Deserialize(file);
file.Close();
}
}
}
And this is how I'm deleting saves right now, which I'm sure is 100% the wrong way to go about it.
public void DeleteSave()
{
if(SaveLoad.savedGames[pos] != null)
{
//SaveLoad.savedGames.Clear();
File.Delete(Path.Combine(Application.persistentDataPath, "/savedGames.sx"));
PopulatePanels();
}
}
PopulatePanels just updates the information displayed on the save files. It takes information from SaveLoad.savedGames and displays it.
Answer by DawnosaurDev · Dec 15, 2019 at 10:54 AM
public static void SeriouslyDeleteAllSaveFiles()
{
string path = Application.persistentDataPath + "/saves/";
DirectoryInfo directory = new DirectoryInfo(path);
directory.Delete(true);
Directory.CreateDirectory(path);
}
Here is a solution I found from this Video Hope its helpful
Answer by AnthonyGrande · May 11, 2020 at 08:17 AM
I found this question when I had the same issue. I figured out how to target individual save files within the binary formatted save location:
// Selected equals the position of the game file saved, 0 is the first and they are numbered sequentially
public static void DeleteFile(Int selected)
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/savedGames.save", FileMode.Open);
Save_Load.savedGames.Remove(Save_Load.savedGames[selected]);
bf.Serialize(file, Save_Load.savedGames);
file.Close();
}
Your answer
Follow this Question
Related Questions
SerializationException: Type UnityEngine.UI.Button is not marked as Serializable. Solution 1 Answer
Writing binary files on Android 1 Answer
Unity Serializer - saves delete after restarting game 2 Answers
Save/Load mutiple game objects as one file 1 Answer
How can I serialize the Particles of a Particle Emitter 1 Answer