アプリケーションの状態を保存
例えば、前回起動した時刻や起動回数など、実行時間を超えてアプリケーションの状態を保存したい場合があります。その場合、外部記憶(ファイルや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は指定しないと無視される)。