C#でインスタンスを保存・読込する

otaguro 105views 更新:2015年10月30日

保存したいインスタンスのクラスは、次のように宣言する。

[Serializable]class TestClass
{
  〜略〜
}

次のような処理で保存・読込することが出来る

//保存したいクラスを宣言
TestClass data = new TestClass();
//保存
FileControl.save(data);
//読込
Object obj = FileControl.load();
//キャスト
if (obj == null) return;
var loadData = (TestClass)obj;
    static class FileControl
    {
        internal static void save(Object saveData)
        {
            //保存先を指定するダイアログを開く
            System.IO.Directory.CreateDirectory(@"Userdata");
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.InitialDirectory = Directory.GetCurrentDirectory() + @"\Userdata";
            sfd.FileName = "dat" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + "_" + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second;
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                //指定したパスにファイルを保存する
                Stream fileStream = sfd.OpenFile();
                BinaryFormatter bF = new BinaryFormatter();
                bF.Serialize(fileStream, saveData);
                fileStream.Close();
            }
        }

        internal static Object load()
        {
            //開くファイルを選択するダイアログを開く
            Object loadedData = null;
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.InitialDirectory = Directory.GetCurrentDirectory() + @"\Userdata";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //ファイルを読込
                Stream fileStream = ofd.OpenFile();
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                loadedData = binaryFormatter.Deserialize(fileStream);
                fileStream.Close();
            }
            return loadedData;
        }
    }

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません