INIファイルの読み書きをスマートに記述出来るように Win32APIのGetPrivateProfileStringとWritePrivateProfileStringをラップした。
using System.Runtime.InteropServices;
using System.Text;
/// <summary>
/// INIファイルを読み書きするクラス
/// </summary>
public class IniFile {
[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(
string lpApplicationName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedstring,
int nSize,
string lpFileName);
[DllImport("kernel32.dll")]
private static extern int WritePrivateProfileString(
string lpApplicationName,
string lpKeyName,
string lpstring,
string lpFileName);
string filePath;
/// <summary>
/// ファイル名を指定して初期化します。
/// ファイルが存在しない場合は初回書き込み時に作成されます。
/// </summary>
public IniFile(string filePath) {
this.filePath = filePath;
}
/// <summary>
/// sectionとkeyからiniファイルの設定値を取得、設定します。
/// </summary>
/// <returns>指定したsectionとkeyの組合せが無い場合は""が返ります。</returns>
public string this[string section,string key] {
set {
WritePrivateProfileString(section, key, value, filePath);
}
get {
StringBuilder sb = new StringBuilder(256);
GetPrivateProfileString(section, key, string.Empty, sb, sb.Capacity, filePath);
return sb.ToString();
}
}
/// <summary>
/// sectionとkeyからiniファイルの設定値を取得します。
/// 指定したsectionとkeyの組合せが無い場合はdefaultvalueで指定した値が返ります。
/// </summary>
/// <returns>
/// 指定したsectionとkeyの組合せが無い場合はdefaultvalueで指定した値が返ります。
/// </returns>
public string GetValue(string section, string key, string defaultvalue) {
StringBuilder sb = new StringBuilder(256);
GetPrivateProfileString(section, key, defaultvalue, sb, sb.Capacity, filePath);
return sb.ToString();
}
}
以下の様に使用する。
using System;
class Program {
static void Main(string[] args) {
//ファイルを指定して初期化
IniFile ini = new IniFile("./test.ini");
//書き込み
ini["section", "key"] = "value";
//読み込み
string value = ini["section", "key"];
Console.WriteLine(value);
//この様に書き込まれる。
//[section]
//key=value
}
}
使わせていただきました。
すげぇぇぇ,
ただ、ただ 脱帽です。
すごいですね!
私も使わせて頂きたいと思います。
ありがとうございます。
助かりました。
直観的ではない
せんきゅー
GetValueメソッド使ってないですよね?
使用例の中では使っていませんがGetPrivateProfileString関数がデフォルト値を取れるようになっているので同様の使い方ができるように実装しています。
谢谢!