ini ファイルに値を書き込む

ini ファイルに値を書き込むコードを紹介します。

概要

新しいアプリでは、iniファイルに値を書き込むことは少ないですが、古いアプリとの互換性を保つためにiniファイルに値を書き込む操作が必要な場合があります。C#のライブラリにはiniファイルを操作するものは無いため、Windows APIを利用してiniファイルを操作します。iniファイルに値を書き込む場合は、WritePrivateProfileString() 関数を利用します。
メモ
iniファイルから値を読み込むコードはこちらの記事を参照してください。

プログラム

UI

下図のUIを作成します。ボタンとテキストボックス(textBox2)と複数行のテキストボックス(textBox1)を配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace InifileDemo
{
  public partial class FormMain : Form
  {
    [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileStringW", CharSet = CharSet.Unicode, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);


    public FormMain()
    {
      InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      bool ret = WritePrivateProfileString("TestSection", "TestKey", textBox2.Text, ".\\file.ini");
      if (ret == true)
      {
        textBox1.Text = "OK";
      }
    }
  }
}

解説

DllImportを利用するために、System.Runtime.InteropServicesをusingに追加します。
using System.Runtime.InteropServices;

下記のコードが、WritePrivateProfileString() のWindows APIをインポートするためのコードです。
    [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileStringW", CharSet = CharSet.Unicode, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);

button1のクリックイベントのコードです。ボタンがクリックされるとWritePrivateProfileString() 関数を呼び出します。第一引数が書き込む iniファイルのセクション名になります。第二引数が書き込むキー名、第三引数が書き込む値になります。第四引数がiniファイルのファイル名になります。iniファイルが実行プログラムと同じ位置に保存される場合はパス名の先頭に ".\\" を記述します。
    private void Button1_Click(object sender, EventArgs e)
    {
      bool ret = WritePrivateProfileString("TestSection", "TestKey", textBox2.Text, ".\\file.ini");
      if (ret == true)
      {
        textBox1.Text = "OK";
      }
    }

実行結果

上記のプロジェクトを実行します。下図のウィンドウが表示されます。


上部のテキストボックス(textBox2)にiniファイルに書き込む値を入力します。今回は "Penguin" の文字列を入力します。入力ができたら[button1]をクリックします。


ボタンがクリックされ、正常に終了できた場合は"OK"の文字列が下部のテキストボックスに表示されます。


アプリケーションのディレクトリを確認します。実行ファイルと同じ位置に "file.ini" ファイルが作成されていることが確認できます。


iniファイルをメモ帳で開いて内容を確認します。WritePrivateProfileString() 関数の第一引数で指定した"TestSection" セクションが作成されており、"TestKey"のキー名でテキストボックスに入力した"Penguin"の値が記録されていることが確認できます。


プログラムに戻り、別の値をテキストボックスに入力してボタンをクリックします。


再度iniファイルの値を確認します。先ほどの値が書き換えられていることが確認できます。


上記のコードで、iniファイルに値を書き込むことができました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2019-08-17
iPentec all rights reserverd.