Microsoftは設定データなどをレジストリへ保存する事を推奨しているぽいですが、結構嫌がるユーザーさんが多いので私のソフトではiniファイルへ書き出すことが多いわけなのですが、久々にWritePrivateProfileString APIを調べていたら、やれば出来る子という事が判明しました。

APIの名前から機能を「文字列をiniファイルに書き出す」だけだと勝手に思いこんでいたのですが、引数の渡し方によってはキーを削除したり、セクションを削除したりできるようです。
(こういうのは削除専用のAPIを別途作った方が使い手は判りやすいと思うんですが。)

また、ユニコード版(WritePrivateProfileStringW)は、ユニコードのまま文字列を書き出せるという事も判明。
ただし、iniファイルがユニコードファイルである必要があります。
なので、iniファイルが存在していなかったら、BOM(バイトオーダーマーク)だけのファイルを生成した上でWritePrivateProfileStringWを実行すれば良さそうです(ファイルが無い状態でWritePrivateProfileStringWを呼ぶとShiftJisに変換されてしまうようです)。

こんな感じかな。

CString strIniPath = iniファイルのパス
if (!::PathFileExists(strIniPath)) {
	CFile file;
	if (file.Open(strIniPath, CFile::modeWrite | CFile::modeCreate | CFile::shareExclusive)) {
		BYTE bom[2] = {0xff, 0xfe};
		file.Write(bom, 2);
		file.Close();
	}
}
::WritePrivateProfileString(_T("Test"), _T("Test"), strUnicode, strIniPath);

記事検索

アーカイブ