C#によるINIファイルの入出力について

API関数を使ったINIファイルの入出力を行なうサンプルです。

INIファイルの入出力サンプルソース

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

public class IniFile {
  [DllImport("KERNEL32.DLL")]
  public static extern uint
    GetPrivateProfileString(string lpAppName,
    string lpKeyName, string lpDefault,
    StringBuilder lpReturnedString, uint nSize,
    string lpFileName);

  [DllImport("KERNEL32.DLL",
      EntryPoint="GetPrivateProfileStringA")]
  public static extern uint
    GetPrivateProfileStringByByteArray(string lpAppName,
    string lpKeyName, string lpDefault,
    byte [] lpReturnedString, uint nSize,
    string lpFileName);

  [DllImport("KERNEL32.DLL")]
  public static extern uint
    GetPrivateProfileInt( string lpAppName,
    string lpKeyName, int nDefault, string lpFileName );

  [DllImport("KERNEL32.DLL")]
  public static extern uint WritePrivateProfileString(
    string lpAppName,
    string lpKeyName,
    string lpString,
    string lpFileName);

  public static void Main(string[] args)
  {
    string iniPath = System.IO.Path.Combine(
        new FileInfo(Environment.CommandLine.Replace( "\"", "" ))
        .Directory.ToString(),"sample.ini");

    // 文字列を読み出す
    StringBuilder sb = new StringBuilder(1024);
    GetPrivateProfileString("セクション1", "キー1",
            "default", sb, (uint)sb.Capacity, iniPath);
    Console.WriteLine("セクション1のキー1の値: {0}",
            sb.ToString());

    // 整数値を読み出す
    uint resultValue = GetPrivateProfileInt(
                "セクション2", "キー2", 0, iniPath);
    Console.WriteLine("セクション2のキー2の値: {0}",
            resultValue);

    // キーと値を書き加える
    WritePrivateProfileString(
        "セクション3", "キー1", "文字列の値3", iniPath);
    WritePrivateProfileString(
        "セクション3", "キー2", "543216789", iniPath);

    // 指定セクションのキーの一覧を得る
    byte [] ar1 = new byte[1024];
    uint resultSize1
          = GetPrivateProfileStringByByteArray(
                "セクション3", null, "default", ar1,
                (uint)ar1.Length, iniPath);
    string result1 = Encoding.Default.GetString(
                            ar1, 0, (int)resultSize1-1);
    string [] keys = result1.Split('\0');
    foreach (string key in keys) {
      Console.WriteLine(
        "セクション3に含まれるキー名: {0}", key);
    }

    // 1つのキーと値のペアを削除する
    WritePrivateProfileString(
        "セクション3", "キー1", null, iniPath);

    // 指定セクション内の全てのキーと値のペアを削除する
    WritePrivateProfileString(
        "セクション3", null, null, iniPath);

  }
}

inserted by FC2 system