using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; namespace Cobilas.IO.Serialization.Binary { /// Base sketch object. [Serializable] public abstract class ScratchObject { /// Draft name. public abstract string Name { get; } /// Downloads draft object to a file. /// Scratch object. /// Path of the file where the object will be downloaded. public static void UnloadScratchObject(ScratchObject scratch, string filePath) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = File.Create(filePath)) formatter.Serialize(stream, scratch); } /// Downloads draft object to a file. /// Scratch object. /// Path of the directory where the file will be created. /// File name. /// File extension. public static void UnloadScratchObject(ScratchObject scratch, string folderPath, string name, string extension = "sobj") => UnloadScratchObject(scratch, Path.ChangeExtension(Path.Combine(folderPath, name), extension)); /// Downloads draft object to a file. /// Scratch object. /// Path of the directory where the file will be created. /// File extension. public static void UnloadScratchObject(ScratchObject scratch, string folderPath, string extension = "sobj") => UnloadScratchObject(scratch, folderPath, scratch.Name, extension); /// Loads an object from a file. /// File path. public static ScratchObject LoadScratchObject(string filePath) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = File.OpenRead(filePath)) return (ScratchObject)formatter.Deserialize(stream); } } }