vb.net 201号室:設定ファイル(INIファイル)

スポンサーリンク
vb.netの部屋
Kappo
Kappo

プログラムの中で動作環境に依存した設定(データベース、フォルダ、ファイル...など)ってありませんか?
プログラムにそれらをコーディングすると、変更のたびにソースコードを変更する必要がありますよね!
そこで、昔からある方法で
 ・設定ファイル(INIファイル)に動作環境を宣言
 ・起動時に動作環境をプログラム内の変数に代入
をすることによってソースコードは変更することなく動作を設定できます
この部屋では、INIファイルを読み込むファンクションの宣言、INIファイルの書き方、起動時の読込ー>取得方法を案内してます
使ってみてね!!!結構便利ですよ!
また、一番したの方にコメント欄があるからよかったら質問・感想などメッセージ入れてください

プロジェクトにモジュールを追加します
 ・「メニュー」ー「プロジェクト」ー「モジュールの追加」を選択

※名前は何でもいいけど、Kappoは昔から「共通で宣言するソース」として ’Declear’ という名前を
 使ってるます・・・意味は何だったか昔だから覚えていないです笑

GetPrivateProfileString・・・設定ファイルを読み込む時に呼び出すファンクション
WritePrivateProfileString・・・設定ファイルに書き込む時に呼び出すファンクション

▼プログラム▼

'-------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------------
<System.Runtime.InteropServices.DllImport("KERNEL32.DLL")>
Public 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
'-------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------------
<System.Runtime.InteropServices.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

'-------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------------

ファイル名:アプリケーション名+”.ini”

記述例:データベース関係の情報

[DATA] 
DBPATH=C:\Smple
DBNAME=Sample.accdb
TBLNAME=tblData
;

■要素の説明■
[DATA] === セクション名:表札みたいなもの
DBPATH、DBNAME、TBLNAME === キー:値の位置
C:\Smple、Sample.accdb、tblData === 値
; === コメント行

※セクション名を工夫すると、機能別に記述ー>読込取得することが出来ますよ!

Kappoは、プログラム起動時によくある「スプラッシュスクリーン」を追加して使用しているよ!

プログラムにコンポーネントを追加します
 ・「メニュー」ー「プロジェクト」ー「コンポーネントの追加」を選択

※名前はとりあえずデフォルトでいいかな・・・

自動で作成されるサブルーチン
 Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
の、下記コードの下に追加
 ’著作権情報
 Copyright.Text = My.Application.Info.Copyright

読み込む情報はデータベース関係のもの(格納変数は上述で追加したDeclear内に追加)
 データベースが保存されているパス、データベース名、使用するテーブル名
  ’ INIファイル情報
  Public DbPath As String ‘データベースパス
  Public DbName As String ‘データベース名
  Public tblName As String ‘テーブル名

▼プログラム▼

(例)読み込む設定ファイル(INIファイル)名
 「アプリケーションが起動するフォルダ}+「アプリケーション名のファイル」

    '----------------------------------------

    Dim MyPath As String = Application.StartupPath
    Dim myFName As String
    Dim myFTitle As String
    Dim buf
    Dim bNo As Integer

    Dim iniFName As String

    '----------------------------------------
    '起動アプリケーションファイル名からアプリケーションファイル名(拡張子含む)を取得
    buf = Split(Application.ExecutablePath, "\")
    bNo = UBound(buf)
    myFName = buf(bNo)

    '------------------------------
    'アプリケーションファイル名(拡張子含む)から拡張子を除く
    buf = Split(myFName, ".")
    myFTitle = buf(0)

    '------------------------------
    'アプリケーション起動フォルダ名の最後に’¥’をつける
    If MyPath.EndsWith("\") = False Then
        MyPath &= "\"
    End If

    '------------------------------
    'INIファイル名
    iniFName = MyPath & myFTitle & ".ini"

設定ファイルを読み込むところ

    '----------------------------------------

    Dim strSb As System.Text.StringBuilder    'StringBuilderクラス

    '----------------------------------------
    ' [DATA]セクションから必要情報を取得

    '------------------------------
    'バッファーサイズを1024文字を割り当てる(かなり大き目)
    strSb = New System.Text.StringBuilder(1024)

    '------------------------------
    'INIファイル内からデータベースパスを取得
    GetPrivateProfileString("DATA", "DBPATH", "default", strSb, 255, iniFName)
    DbPath = strSb.ToString      'データベースパス

    '------------------------------
    'INIファイル内からデータベース名を取得
    GetPrivateProfileString("DATA", "DBNAME", "default", strSb, 255, iniFName)
    DbName = strSb.ToString      'データベース名

    '------------------------------
    'INIファイル内からテーブル名を取得
    GetPrivateProfileString("DATA", "TBLNAME", "default", strSb, 255, iniFName)
    tblName = strSb.ToString     'テーブル名

    '------------------------------
    '後片付け
    strSb = Nothing

    '----------------------------------------

記述:GetPrivateProfileString(“DATA”, “DBPATH”, “default”, strSb, 255, iniFName)
               |    |     |    |   |  ↓
               |    |     |    |   ↓ 設定ファイル名
               |    |     |    ↓  読込む文字数
               ↓    ↓     ↓   読込んだ値の格納場所
            セクション名  キー    値固定(内容は覚えていない=おまじない)

プログラムを実行すると
 変数 DbPath = ”C:\Sample”
 変数 DbPath = ”Sample.accdb”
 変数 DbPath = ”tblData”
が代入されました

▼Debug.print で出力した表示▼

Amazon | 本, ファッション, 家電から食品まで | アマゾン
Amazon.co.jp 公式サイト。アマゾンで本, 日用品, ファッション, 食品, ベビー用品, カー用品ほか一億種の商品をいつでもお安く。通常配送無料(一部を除く)

  

コメント

タイトルとURLをコピーしました