Filestream/SaveManager

Hello!

I created a save/load script by following a guide on youtube, but I get this error when SaveLoad.Load(); is called:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph) [0x00000] in :0
at SaveLoad.Save () [0x00000] in :0
(Filename: Line: -1)

public static void Save ()
	{
		BinaryFormatter binary = new BinaryFormatter ();
		FileStream fStream = File.Create (Application.persistentDataPath + "/turbocoinSaveFile.sav");

		SaveManager sManager = new SaveManager ();
		sManager.coins = CoinController.coins;
		sManager.coinsTotalEver = CoinController.coinsTotalEver;
		sManager.totalTurbosEver = Statistics.totalTurbosUsed;

		binary.Serialize (fStream, sManager);
		fStream.Close ();
	}

	public static void Load ()
	{
		if (File.Exists (Application.persistentDataPath + "/turbocoinSaveFile.sav")) {
			BinaryFormatter binary = new BinaryFormatter ();
			FileStream fStream = File.Open (Application.persistentDataPath + "/turbocoinSaveFile.sav", FileMode.Open);
			SaveManager sManager = (SaveManager)binary.Deserialize (fStream);
			fStream.Close ();

			CoinController.coins = sManager.coins;
			CoinController.coinsTotalEver = sManager.coinsTotalEver;
			Statistics.totalTurbosUsed = sManager.totalTurbosEver;
		}
	}

 [Serializable]
 class SaveManager
 {
     public int coins;
     public int coinsTotalEver;
     public int totalTurbosEver;

}

Might be an issue with IDisposable interface, as you’re not calling Dispose() explicitly. Try wraping I/O stuff in the ‘using’ clause.

void Save()
{
    using(FileStream fs = File.Create("filename"))
    {
         BinaryFormatter binf = new BinaryFormatter();
         binf.Serialize(fs, saveData);
    }
}

Looking again it seems like the error is in your save function specifically with your file. Check that fileStream != null after you create it.

Are you running this code from the editor? you are not by chance trying to run this from a web application are you? Because then the persistentDataPath would not work.