本記事では、VB.NETでINIファイルを読み込む方法を説明しています。
外部ファイルなどの設定情報は、XMLが推奨されていますが、まだまだ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 |
CInit.vb ''' <summary> ''' INIファイル読み込みクラス ''' </summary> Public Class CIni 'プロファイル文字列取得 Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As System.Text.StringBuilder, ByVal nSize As UInt32, ByVal lpFileName As String) As UInt32 'プロファイル文字列書込み Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer Private strIniFileName As String = "" ''' <summary> ''' コンストラクタ ''' </summary> ''' <param name="strIniFile">INIファイル名(フルパス)</param> Sub New(ByVal strIniFile As String) Me.strIniFileName = strIniFile 'ファイル名退避 End Sub ''' <summary> ''' プロファイル文字列取得 ''' </summary> ''' <param name="strAppName">アプリケーション文字列</param> ''' <param name="strKeyName">キー文字列</param> ''' <param name="strDefault">デフォルト文字列</param> ''' <returns>プロファイル文字列</returns> Public Function GetProfileString(ByVal strAppName As String, ByVal strKeyName As String, ByVal strDefault As String) As String Try Dim strWork As System.Text.StringBuilder = New System.Text.StringBuilder(1024) Dim intRet As Integer = GetPrivateProfileString(strAppName, strKeyName, strDefault, strWork, strWork.Capacity - 1, strIniFileName) If intRet < 0 Then 'エスケープ文字を解除して返す Return ResetEscape(strWork.ToString()) Else Return strDefault End If Catch ex As Exception Return strDefault End Try End Function ''' <summary> ''' プロファイル文字列設定 ''' </summary> ''' <param name="strAppName">アプリケーション文字列</param> ''' <param name="strKeyName">キー文字列</param> ''' <param name="strSet">設定文字列</param> ''' <returns>True:正常, False:エラー</returns> Public Function WriteProfileString(ByVal strAppName As String, ByVal strKeyName As String, ByVal strSet As String) As Boolean Try 'エスケープ文字変換 Dim strCnv As String = SetEscape(strSet) Dim intRet As Integer = WritePrivateProfileString(strAppName, strKeyName, strCnv, strIniFileName) If intRet < 0 Then Return True Else Return False End If Catch ex As Exception Return False End Try End Function ''' <summary> ''' エスケープ文字変換 ''' </summary> ''' <param name="strSet">設定文字列</param> ''' <returns>変換後文字列</returns> Private Function SetEscape(ByVal strSet As String) As String Dim strEscape As String = ";#=:" Dim strRet As String = strSet Try For i = 0 To strEscape.Length - 1 Dim str As String = strEscape.Substrin(i, 1) strRet = strRet.Replace(str, "\" & str) Next Return strRet Catch ex As Exception Return "" End Try End Function ''' <summary> ''' エスケープ文字解除 ''' </summary> ''' <param name="strSet">設定文字列</param> ''' <returns>変換後文字列</returns> Private Function ResetEscape(ByVal strSet As String) As String Dim strEscape As String = ";#=:" Dim strRet As String = strSet Try For i = 0 To strEscape.Length - 1 Dim str As String = strEscape.Substrin(i, 1) strRet = strRet.Replace("\" & str, str) Next Return strRet Catch ex As Exception Return "" End Try End Function End Class |
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 |
使用例
1 2 3 4 5 6 7 8 9 10 |
'INIファイルクラスの生成 Dim Ini As New CIni(strPath & "\dev.ini") 'INIファイルへの書込み 'Ini.WriteProfileString("SECTION1", "DATA1", "test-data-1:aaa") 'INIファイルからの取得 strSRV = Ini.GetProfileString("DATABASE", "SERVER_NAME", "hogehoge") |