2016年6月11日土曜日

.net シリアライズ機能を使用してクラスの保存

シリアライズ機能を使用する時のひな型

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

//クラス保存出来るように、属性を追加
[Serializable()]
public class Hoge
{
  public DateTime d;
}

public class SaveLoad
{
  public const string FILE_NAME = "hoge.txt";

  public static void InitFile()
  {
 if(!File.Exists(FILE_NAME))
    {
   Hoge[] h = new Hoge[1];
   h[0] = new Hoge();
   h[0].d = DateTime.Now;
   Save(h);
    }
 
  }
  
  public static void Save(Hoge[] h)
  {
 FileStream fs = new FileStream(FILE_NAME,FileMode.Create,FileAccess.Write);
 BinaryFormatter b = new BinaryFormatter();
 b.Serialize(fs,h);
 fs.Close();

  }

  public static Hoge[] Load()
  {

 BinaryFormatter b = new BinaryFormatter();
 FileStream fs = new FileStream(FILE_NAME, FileMode.OpenOrCreate, FileAccess.Read);
 Hoge[] loadFile;
 loadFile = (Hoge[])b.Deserialize(fs);
 fs.Close();

 return loadFile;  
  }

  public static void Main()
  {
 Hoge[] h;
 //ファイルがない場合は、ファイルを作成
 SaveLoad.InitFile();
 //ファイルのロード
 h = SaveLoad.Load();
 System.Console.WriteLine("前回起動時刻は"+ h[0].d.ToString("yyyy/MM/dd HH:mm:ss")+"です。");
 //終了時刻をセーブ
 h[0].d = DateTime.Now;
 SaveLoad.Save(h);
  }

0 件のコメント:

コメントを投稿