アプリケーションの状態を保存

例えば、前回起動した時刻や起動回数など、実行時間を超えてアプリケーションの状態を保存したい場合があります。その場合、外部記憶(ファイルやDBなど)にシリアル化などして保存する(いわゆる永続化)ことになりますが、.NET2.0だと、SettingsBase(ApplicationSettingsBase)を使うと便利です。
以下は、アプリケーションの前回起動した時刻を保存する例。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace Sample
{
    public class MySettings : ApplicationSettingsBase
    {
        const string KEY = "LastExecuted";

        // ユーザ毎に保存する
        [UserScopedSetting]
        public DateTime LastExecuted
        {
            get
            {
                // if (this.SettingsKey.Contains(KEY)) {...}
                // ↑このように書くのはダメ。
                // 最初のアクセス時に設定を読み込むようなので、
                // アクセスするまでキーが存在しない

                object o = this[KEY];
                if (o == null)
                    return DateTime.MinValue;
                else
                    return (DateTime)o;
            }
            set
            {
                this[KEY] = value;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MySettings settings = new MySettings();
            Console.WriteLine("前回の起動時刻:" + settings.LastExecuted);

            // 今回の時刻を保存する
            settings.LastExecuted = DateTime.Now;
            settings.Save();

            Console.ReadLine();
        }
    }
}

また、アプリケーション構成ファイルを以下のように記述します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="userSettings"
                  type="System.Configuration.UserSettingsGroup">
      <section name="Sample.MySettings"
               type="System.Configuration.ClientSettingsSection"
               allowExeDefinition="MachineToLocalUser"
               requirePermission="false"/>      
    </sectionGroup>
  </configSections>
</configuration>

で、アプリケーションを実行してみると、確かに前回の実行時刻が保存されていることが分かります。
・・・ところで、保存されている内容はどこにあるのでしょうか?

<c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>

実は上記で示される場所にあり、サンプルの場合は、

C:\Documents and Settings\mei\Local Settings\Application Data\Sample\ConsoleApplication1.exe...

の中を探ると見つかります(companynameは指定しないと無視される)。