【C#】WritePrivateProfileStringでハマった
WritePrivateProfileStringは、Windowsのapi関数でiniファイルを扱う関数の一つです。他には、
- GetPrivateProfileInt (iniファイルから数値を読みとる)
- WritePrivateProfileString (iniファイルに文字列を書き込む)
- GetPrivateProfileSectionNames (iniファイル中のすべてのセクション名を列挙する)
- GetPrivateProfileSection (iniファイル中の指定されたセクション中のすべてキーと値のペアを列挙する)
といったものがあります。
iniファイルの形式
iniファイルの形式は、以下のようになります。
[section1] key1 = hoge key2 = huga [section2] length = 3 max = 255
つまり、
[セクション名] データ1=値1 データ2=値2
といったセクションを並べていくファイル形式です。このファイルに対して、最初に述べた関数を用いることで、セクション名や、任意のセクションのデータを取得・書き込みができます。
陥った状況
WritePrivateProfileStringは、書き込みしようとしたデータのセクションとデータ名があった場合は上書き、無い場合は新規に書くというものです。しかし、
[section1] key1 = hoge key2 = huga [section2] length = 3 max = 255
に対してsection1のkey1をhogehogeに上書きしようとすると、
[section1] value1 = hoge value2 = huga [section2] length = 3 max = 255 [section1] value1 = hogehoge
というように一番上のセクションが認識されないという状況になりました。
そもそも使用を推奨されていなかった
この関数は、16 ビット Windows ベースのアプリケーションとの互換性を保つ目的でのみ提供されています。つまり、使用は推奨されておらず、メンテナンスも行われていません。調べてたどり着くページも古いものばかりでした。
json形式に変更
json形式に変更することにしました。C#ではjsonのシリアライザとデシリアライザが用意されているのでうまく扱えます。
使っている関数が現在のバージョンでサポートされているか、調べることが重要だと感じました。