1, その保存場所について
いままでは設定の保存はGetPrivatePrifile* APIを使ってiniファイルに保存していればよかったんですが、Vistaの登場でそういうわけにはいかなくなってしまいました。Vistaでは”Program files”下に置かれたアプリがexeのあるフォルダにファイルを作ることも書き込むことも許してくれないみたいです。
iniファイルの利点は、フォルダを削除すればアプリケーションのすべてのファイルを一括削除できることにあると思います。痕跡は残りません。もちろんOSがいろいろ残すでしょうから痕跡が全く残らないわけではありませんが。また設定ファイルのせいでアプリの挙動がおかしくなったときでも、iniファイルを削除してしまえば初期値に戻るので復旧が簡単です。
復旧といえばインストーラでインストールもアンインストールもできなくなって困った経験がある人も多いんじゃないでしょうか?
さて、レジストリに書き込むとユーザーごとに別々の場所に書くことになるので、アンインストーラーが本当に全員分の設定を削除してくれているのかはわかりません。もちろんこれはユーザーごとの”Documents and Settings”配下にデータを置いた場合も同じです。つまりアプリを色々使えば使うほどゴミファイルがどんどんたまっていってしまうのです。またアプリの設定場所が固定されているとウイルスも作りやすくなってしまいます。
よってアプリの設定情報は、そのフォルダの配下に置いた方がいいんじゃないでしょうか。ユーザーごとに分けたい場合は”user”フォルダを作成し、その配下におけばいいですし。
2, 保存のフォーマット
話は変わってxmlですが、なんか呼び方がserialilzeとかdeserializeとかになってますね。でもこれって退化じゃないでしょうか?いままではそういうことを意識しなくてもよかったのに連続化という下位概念を持ち出してくるわけですから。
そしてこれは言葉の問題だけじゃなくて本当に意識しなければいけないのではないでしょうか?iniファイルやレジストリの場合には、保存の際、それが壊れてしまうということを意識しなくてもよかったと思いますが、xmlで一気に書くとなると、もし書き始めたときにPCが固まってしまったら全部壊れるんじゃないかとか、また、ユーザーがエディタでそれをいじって読み込み不能になって、終了時デフォルト値のまま全部保存しちゃって結局全部消えちゃうとか、あるいはクラスの構成が変わったときの互換性は大丈夫かとか、考えなくてはいけないことが一気に多くなるような気がします。もちろんちゃんと調べたわけではないので嘘いってるかもしれませんが。
逆にxmlで有利な点はUTF-8で書けることだとおもいます。そしてそれはWindows98系でも同じなんでしょう(多分)。iniファイルだとそれが難しいです。W系のAPIを使ってしまうと98系で動かなくなりますし、A系だと中国語や韓国語が保存できません。あえてやるとすればGetPrivateProfileStructでバイナリ保存でしょうが、これだとユーザーが編集できなくなってしまいます。