[C#] ini環境ファイルを使う方法


Devlopment note / C#    作成日付 : 2020/04/22 00:09:39   修正日付 : 2020/04/22 00:09:39

こんにちは。明月です。


この投稿はC#でini環境ファイルを使う方法に関する説明です。


C#で一般的な環境ファイルはApp.configファイルのXMLファイルです。

link - [C#] 環境設定ファイルを扱う方法(System.Configuration)

iniファイルはC++でよく使う環境ファイルの構造です。

セッションがあり、キーでデータを取得する構造です。でもC#もC++ライブラリを使うことができるのでiniファイルを読み取りや書き込みができます。

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

namespace Example
{
  public static class ConfigSystem
  {
    // CのDLLライブラリのImport
    [DllImport("kernel32")]
    // 関数のパラメータはsection名、キー名、値、ファイルパス
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
    // CのDLLライブラリのImport
    [DllImport("kernel32")]
    // 関数のパラメータはsection名、キー名、デフォルト値(sectionやキー、値がない場合、設定する値)、返却値(リターン値)、バッファサイズ、ファイルパス
    private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);
    
    // iniファイルを作成する関数
    public static void WriteConfig(string file, string section, string key, string val)
    {
      WritePrivateProfileString(section, key, val, GetFile(file));
    }
    // iniファイルから値を取得する関数
    public static string ReadConfig(string file, string section, string key)
    {
      // C# const char*はbyte配列に表現できる。
      byte[] temp = new byte[1024];
      // 値を取得
      int ret = GetPrivateProfileString(section, key, null, temp, temp.Length, GetFile(file));
      // iniは基本テキストファイル、ドキュメントフォーマットによるが、基本sjisだ。
      return Encoding.Default.GetString(temp, 0, Array.IndexOf(temp, (byte)0));
    }
    // iniファイルパスを取得関数
    private static string GetFile(string file)
    {
      // 事項するファイルのパス
      return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, file + ".ini");
    }
  }
  class Program
  {
    //実行関数
    static void Main(string[] args)
    {
      // config.iniファイルに「SectionTest」セッションで「data」キーで「日本語」の値を格納する。
      ConfigSystem.WriteConfig("config", "SectionTest", "data", "日本語");

      // config.iniファイルに「SectionTest」セッションで「data」キーの値を取得する。
      Console.WriteLine(ConfigSystem.ReadConfig("config", "SectionTest", "data"));

      Console.WriteLine("Press any key...");
      Console.ReadKey();
    }
  }
}

WritePrivateProfileStringとGetPrivateProfileStringはC#のライブラリではなく、C++のライブラリの「kernel32」の関数です。


実行関数でiniファイルを書き込んで読み取るので同然「日本語」という結果が出ます。

config.iniファイルを確認しましょう。



config.iniファイル中で[SectionTest]のdataのキーで「日本語」という値があります。

iniファイルはプログラムだけで操作することではなく、直接にセッションやキー、値を設定すると上のGetPrivateProfileStringの関数で読み込むのが可能です。


ここまでC#でini環境ファイルを使う方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿