INIファイルを読み書きする |
正直にテキスト入出力処理を記述するよりは、WIN32APIを使ってしまいましょう。ここでは標準モジュールに記述していますが
INIファイルアクセスクラスにしてみても良いですね。 日本語文字列を正しく処理するために、アンマネージドコードのマーシャリングをします。 '名前空間のインポート Imports System.Text Imports System.Runtime.InteropServices Module InifileIO '------------------------------------------------------------ ' WIN32APIの宣言 '------------------------------------------------------------ Private Declare Function GetPrivateProfileInt Lib "kernel32" _ Alias "GetPrivateProfileIntA" ( _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpSection As String, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _ ByVal nDefault As Int32, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String _ ) As Int32 Private Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" ( _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpSecName As String, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpDefault As String, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpReturnedString As StringBuilder, _ ByVal nSize As UInt32, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String _ ) As Int32 Private Declare Function WritePrivateProfileString Lib "kernel32" _ Alias "WritePrivateProfileStringA" ( _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpSecName As String, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpSzvalue As String, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String _ ) As <MarshalAs(UnmanagedType.Bool)> Boolean '------------------------------------------------------------ ' INIファイル読み込み Integerタイプ '------------------------------------------------------------ Public Function vbGetProfileInt( _ ByVal section As String, _ ByVal keyname As String, _ ByVal defval As Integer, _ ByVal profile As String) As Integer Return (GetPrivateProfileInt(section, keyname, defval, profile)) End Function '------------------------------------------------------------ ' INIファイル読み込み Stringタイプ '------------------------------------------------------------ Public Function vbGetProfileString( _ ByVal section As String, _ ByVal keyname As String, _ ByVal defval As String, _ ByVal profile As String) As String '受け取る文字列の最大長を512バイトにする、必要があればもっと大きく。 Dim sb As New StringBuilder(512) Dim intLen As UInt32 = Convert.ToUInt32(sb.Capacity) GetPrivateProfileString(section, keyname, defval, sb, intLen, profile) Return (sb.ToString()) End Function '------------------------------------------------------------ ' INIファイル保存 Stringタイプ '------------------------------------------------------------ Public Sub vbWriteProfile( _ ByVal section As String, _ ByVal keyname As String, _ ByVal setval As String, _ ByVal profile As String) WritePrivateProfileString(section, keyname, setval, profile) End Sub End Module |