本記事では、C#でINIファイルを読み込む方法を説明しています。
INIファイルは、何かと便利でもあり、
ちょっとした設定情報を、INIファイルで管理する場合のサンプルを記載します。
INIファイルの読み込みクラス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; namespace SAMPLE { class CIni { [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); private string mFileName = ""; /// <summary> /// /// </summary> /// <param name="iniFileName"></param> public CIni(string iniFileName) { this.mFileName = iniFileName; } /// <summary> /// /// </summary> /// <param name="strAppName"></param> /// <param name="strKeyName"></param> /// <param name="strDefault"></param> /// <returns></returns> public string GetProfileString(string strAppName, string strKeyName, string strDefault) { try { System.Text.StringBuilder strWork = new System.Text.StringBuilder(1024); int intRet = GetPrivateProfileString(strAppName, strKeyName, strDefault, strWork, strWork.Capacity - 1, mFileName); if (intRet > 0) { //エスケープ文字を解除して返す return ResetEscape(strWork.ToString()); } else { return strDefault; } } catch (Exception ex) { return strDefault; } } /// <summary> /// /// </summary> /// <param name="strAppName"></param> /// <param name="strKeyName"></param> /// <param name="strSet"></param> /// <returns></returns> public bool WriteProfileString(string strAppName, string strKeyName, string strSet) { try { //エスケープ文字変換 string strCnv = SetEscape(strSet); int intRet = WritePrivateProfileString(strAppName, strKeyName, strCnv, mFileName); if (intRet > 0) { return true; } else { return false; } } catch (Exception ex) { return false; } } /// <summary> /// /// </summary> /// <param name="strSet"></param> /// <returns></returns> private string SetEscape(string strSet) { string strEscape = ";#=:"; string strRet = strSet; try { for (int i = 0; i < strEscape.Length - 1; i++) { string str = strEscape.Substrin(i, 1); strRet = strRet.Replace(str, "\\" + str); } return strRet; } catch (Exception ex) { return ""; } } } } |
INIファイルサンプル
1 2 3 4 5 6 7 8 |
[DATABASE] SERVER_NAME=(localdb)v11.0 DATABASE_NAME=hogehoge LOGIN_ID= LOGIN_PWD= CONNECT_TIMEOUT=30 |
使用例
INIファイルクラスの生成、項目の取得、書込の例を以下に記載します。
1 2 3 4 5 6 7 8 |
//INIファイルクラスの生成 CIni ini = new CIni("dev.ini"); //INIファイルへの書込み Ini.WriteProfileString("SECTION1", "DATA1", "test-data-1:aaa") //INIファイルからの取得 strSRV = ini.GetProfileString("DATABASE", "SERVER_NAME", "hogehoge") |