C# で UTF-8 の INI

さて、STL で作った IniFile8 クラスを C# で作り替えているんだが。

C#のジェネリック -OKWave

ココとかを参考に std::pair 互換クラスを作ろうかとも。
でも今はよくワカンネ、別の方法で実装できるならそれでいいし。

意地でも同じ方法を行いたいのではなく「こういう処理がしたい」なので。
この言語にて最適な方法を探ったほうが強引に同じにするより自然だろうと。

StreamWriter クラス (System.IO)

んー、BOM は強制的に書き込まれてしまうということなんですね。
別に変換して ASCII で書き込むという方法もあるけどまあいいか。

文字列がnull(Nothing)か空文字列かを簡単に判定するには?[2.0のみ、C#、VB] ? @IT

うっ!そういえばそうだ、考えていなかった。
IniFile8 STL 版は空文字チェックなんてしていない。

C# でキーが見つからない場合は関数で null を返すようにしてテスト。
どうやらそういう使い方だけなら null チェックだけで済みそうだ。

C++ は試しに Cinema の設定で「リストアップ拡張子」を空にしてみる。
再起動すると…あぁやっぱり初期値の復活だ。

if ( (s.empty()) && (0 != s.length()) )

でチェックすればいいかな?
しかし C# のコードを探して C++ 版の不具合を見つけるとはなんとも。
やはり色々なアプリを平行して作るとイイことあるよ。

ということで。

UTF-8 の ini 読み書き

というコードがなんとかできた。

using IniFile

/* 略 */

private void Window_Closed(object sender, EventArgs e)
{
    IniFile8 ini = new IniFile8(@"D:\\00_Temp\\test.ini");
    ini.WriteInteger("Window", "Left", (int)this.Left);
    ini.WriteInteger("Window", "Top", (int)this.Top);
    ini.WriteString("Window", "Title", this.Title);
    ini.Save();
}

みたいなコードで使える。