読者です 読者をやめる 読者になる 読者になる

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

VB.NET で ini ファイルを読み書きしてみる

VisualBasic .NET Tips

知り合いに頼まれたのでやってみた。
VB なんぞ生まれて初めて触る。
C#.NET 齧ってるからいけるかと思ったが、やっぱ書き方、文法がやりづらかったw
.NET になってから、Ini ファイルが使われなくなってるなってるので、一番簡単な方法として、Win32API (早い話が Windows のAPI)叩く。

Imports System.Runtime.InteropServices

Module Module1
    <DllImport("KERNEL32.DLL")> _
    Public Function WritePrivateProfileString( _
        ByVal lpAppName As String, _
        ByVal lpKeyName As String, _
        ByVal lpString As String, _
        ByVal lpFileName As String) As Integer
    End Function

    <DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _
    Public Function GetPrivateProfileString( _
        ByVal lpAppName As String, _
        ByVal lpKeyName As String, _
        ByVal lpDefault As String, _
        ByVal lpReturnedString As String, _
        ByVal nSize As Integer, _
        ByVal lpFileName As String) As Integer
    End Function

    <DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _
    Public Function GetPrivateProfileInt( _
        ByVal lpAppName As String, _
        ByVal lpKeyName As String, _
        ByVal nDefault As Integer, _
        ByVal lpFileName As String) As Integer
    End Function

    Sub Main()
        ' INI ファイルに設定値を書き込む(実行すると、ファイルができているはず)
        WritePrivateProfileString("default", "sample_key", "hello_world", "d:\sample.ini")
        WritePrivateProfileString("default", "sample_int", "256", "d:\sample.ini")

        ' INI から設定値を取り込んで表示する
        Dim readMessage As String = Space(255)
        GetPrivateProfileString("default", _
                                      "sample_key", _
                                      "None", _
                                      readMessage, _
                                      Len(readMessage), _
                                      "d:\sample.ini")
        System.Console.WriteLine(readMessage)
    End Sub

End Module

.NET は移植性なきゃだめなんだい!
と言う方は作ってください。
多分次の手順でできるんじゃない?

  • 1行単位で読み込み
  • セクションなら、辞書セットを新しくセクション名で辞書セット作る
  • それ以外(値)なら、「=」で Split して Key=Value で辞書に書き込む。

とすれば、多分できるんじゃないかと思われ。
面倒なので作る気はなし、、、。