どうも!リョクちゃです。
今回は、iniファイルと呼ばれる設定ファイルについて使い方を例を交えて紹介していきます。
アプリケーションを作るうえで必要となってくるスキルだと筆者は思っています。
ここで使い方を身に着け、アプリケーション作りに活かしていただけたら嬉しいです。
ちなみに前回はデータテーブルについて記事を書きました。
目次
iniファイル : 設定ファイル
主にWindowsで使用され、テキストファイルの一種となります。
アプリケーションの設定などを書き込んだ設定ファイルになります。
例えば、画面のサイズやアプリケーションがファイルを作成する機能を持っていたら、
そのファイルの作成場所などを設定ファイルに書き込んでおくことで、
コードをいじらなくても、設定ファイルを参照することで、
変更が行えたりと利便性があります。
iniファイルは、テキストファイルと違って、拡張子が”.ini”になります。
iniファイルの準備をする
さっそく、iniファイルを作ってみます。
VisualStudioを起動し、新しくWindowsフォームアプリケーションの
プロジェクトを作成しましょう。
作成ができたら、ソリューションエクスプローラの”bin”フォルダの→をクリックして、
リストを展開します。
展開すると、”Debug”フォルダがあります。これを選択して右クリックを押します。
右クリックを押すと、追加という項目が出てきます。(下図参照)
追加にカーソルを合わせると、新たに小ウィンドウが開かれます。
その中にある”新しいフォルダを作成”を選んでフォルダを作成します。(下図参照)
今回は、iniフォルダという名前のフォルダを作成しました。
次に、このiniフォルダにiniファイルを作成していきます。
先ほどと同様に、iniフォルダを選択し、右クリックを押します。
追加にカーソルを合わせて、新しい項目を選びます。
上の画面の左タブにある”全般”を選択します。
選択すると、真ん中に表示される内容が切り替わります。
この中のテキストファイルを選択して、名前を「test.ini」に変え、追加ボタンを押します。
これでiniファイルを作成することができました。
iniファイルに内容を書き込む
作成したiniファイルに内容を書き込んでいきます。
iniファイルの構成は、下図のようになります。
キーに対してバリューがあるといった感じです、これはPythonの時にも紹介した、
辞書型(dictionary)と似たような形ですね。
では、先ほど作成したiniファイルに同じ内容を書き込んでみましょう。
これでiniファイルが完成しました。
実際に作成したiniファイルを読み込んでいきましょう。
いよいよ本題です。
iniファイルを読み込む : 本題
下のようなフォーム画面を作成します。
ボタンとリッチテキストボックスを配置しています。
※ 作成する際は大きさや配置場所は自由で問題ありません。
2つのコントロールは必須です。
それでは、ボタンをダブルクリックして、コードエディタ画面に移ります。
iniファイルのパスを定数として設定する
最初にiniファイルのパス(場所)を定数として宣言しておきます。
コードは下のようになります。
1 2 3 4 5 6 7 8 9 |
Public Class Form1 ' iniファイルの場所を定数として宣言 Private Const INI_FILE_PATH As String = "./ini/test.ini" Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click End Sub End Class |
ファイルを読み取る変数を準備する
次にファイルを読み取る変数の準備をします。
ここは前々回紹介した、System.IO.StreamReaderは使いません……。
(使わないならどうするの……?)
iniファイルの場合は、APIと呼ばれるツールを使います。
アプリケーションプログラミングインターフェース
と呼ばれます。
このAPIについては、既に公開されているツールですので、
そのまま使わせていただきます。
コードとして書くと下のようになります。
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 |
' System.Runtime.InteropServicesクラスをインポート Imports System.Runtime.InteropServices Public Class Form1 ' iniファイルの場所を定数として宣言 Private Const INI_FILE_PATH As String = "./ini/test.ini" ' API宣言 ' ------------------------------------------------------ ' ini ファイル書き込み ' ------------------------------------------------------ <DllImport("Kernel32.dll")> Private Shared Function WritePrivateProfileString( ByVal lpAppName As String, 'セクション名 ByVal lpKeyName As String, 'キー名 ByVal lpString As String, ByVal lpFileName As String) As Integer End Function ' ------------------------------------------------------ ' ini ファイル読み込み ' ------------------------------------------------------ <DllImport("Kernel32.dll", CharSet:=CharSet.Auto)> Private Shared Function GetPrivateProfileString( ByVal lpAppName As String, ' セクション名 ByVal lpKeyName As String, ' キー名 ByVal lpDefault As String, ' キーが見つからなかった場合に取得するデフォルト値 ByVal lpReturnedString As System.Text.StringBuilder, ' 取得した文字列が入るバッファ ByVal nSize As Integer, ' 取得した文字列のバッファサイズ ByVal lpFileName As String) As Integer End Function '------------------------------------------------------- 'iniファイル(整数値読み込み) '------------------------------------------------------- <DllImport("Kernel32.dll", CharSet:=CharSet.Auto)> Private Shared Function GetPrivateProfileInt( ByVal lpAppName As String, ' セクション名 ByVal lpKeyName As String, ' キー名 ByVal nDefault As Integer, ' キーが見つからなかった場合に取得するデフォルト値 ByVal lpFileName As String) As Integer ' iniファイル名 End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click End Sub End Class |
これでAPIを使う準備ができ、iniファイル読み込めることができます。
次に、APIを使ってiniファイルを読み込む関数を作成していきます。
APIを使って読み込む関数を作る
コードは下のようになります。
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 |
' System.Runtime.InteropServicesクラスをインポート Imports System.Runtime.InteropServices Public Class Form1 ' iniファイルの場所を定数として宣言 Private Const INI_FILE_PATH As String = "./ini/test.ini" ' API宣言 ' ------------------------------------------------------ ' ini ファイル書き込み ' ------------------------------------------------------ <DllImport("Kernel32.dll")> Private Shared Function WritePrivateProfileString( ByVal lpAppName As String, 'セクション名 ByVal lpKeyName As String, 'キー名 ByVal lpString As String, ByVal lpFileName As String) As Integer End Function ' ------------------------------------------------------ ' ini ファイル読み込み ' ------------------------------------------------------ <DllImport("Kernel32.dll", CharSet:=CharSet.Auto)> Private Shared Function GetPrivateProfileString( ByVal lpAppName As String, ' セクション名 ByVal lpKeyName As String, ' キー名 ByVal lpDefault As String, ' キーが見つからなかった場合に取得するデフォルト値 ByVal lpReturnedString As System.Text.StringBuilder, ' 取得した文字列が入るバッファ ByVal nSize As Integer, ' 取得した文字列のバッファサイズ ByVal lpFileName As String) As Integer End Function '------------------------------------------------------- 'iniファイル(整数値読み込み) '------------------------------------------------------- <DllImport("Kernel32.dll", CharSet:=CharSet.Auto)> Private Shared Function GetPrivateProfileInt( ByVal lpAppName As String, ' セクション名 ByVal lpKeyName As String, ' キー名 ByVal nDefault As Integer, ' キーが見つからなかった場合に取得するデフォルト値 ByVal lpFileName As String) As Integer ' iniファイル名 End Function ''' <summary> ''' INIファイル読取(文字列) ''' </summary> ''' <param name="lpAppName"></param> ''' <param name="lpKeyName"></param> ''' <returns></returns> Public Function GetIniString(ByVal lpAppName As String, ByVal lpKeyName As String) As String Dim BuffSize As Integer = 256 Dim str As System.Text.StringBuilder = New System.Text.StringBuilder(BuffSize) Try Call GetPrivateProfileString(lpAppName, lpKeyName, str.ToString, str, str.Capacity, INI_FILE_PATH) Return str.ToString Catch ex As Exception Return str.ToString End Try End Function ''' <summary> ''' INIファイル読取(整数) ''' </summary> ''' <param name="lpAppName">セクション</param> ''' <param name="lpKeyName">キー</param> ''' <returns></returns> Public Function GetIniInt(ByVal lpAppName As String, ByVal lpKeyName As String) As Integer Dim int As Integer Try int = GetPrivateProfileInt(lpAppName, lpKeyName, 0, INI_FILE_PATH) Return int Catch ex As Exception Return int End Try End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click End Sub End Class |
- 文字列を読み込む関数をGetIniString()
- 整数値を読み込む関数をGetIniInt()
として、それぞれ関数を作成しました。
関数を使って、iniファイルを読み込む
いよいよ、iniファイルを読み込んでいきます。
今回は、ボタンを押したら、iniファイルを読み込み
読み込んだ結果をリッチテキストボックスに出力していくことをゴールとしました。
コードは下のようになります。※抜粋して表示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
' System.Runtime.InteropServicesクラスをインポート Imports System.Runtime.InteropServices Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' iniファイルを読み込む Me.RichTextBox1.Text = GetIniString("TEST", "key") Me.RichTextBox1.Text += vbCrLf Me.RichTextBox1.Text += GetIniString("TEST", "key2") End Sub End Class |
GetIniStringの引数には、セクションと各キーを渡しています。
それぞれをから取得した結果がリッチテキストボックスに表示がされます。
下図のようになれば、成功です。
ここまでで一通りの流れは終了です。
無事にiniファイルを読取りテキストボックスに表示することができました。
お疲れ様です。
まとめ
今回やったこと、
iniファイルとは設定ファイルであり、アプリケーション作成ではかかせない。
iniファイルの構成としては、[セクション] key=Valueの関係があり、
これを記述していく必要がある。
iniファイルを読み込むには、専用のAPIを使う。
ご覧いただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。