INI ファイルへの書き込み及び読み込み(2個) (SNo.075) 1.INI ファイルから読み込み 2.INI ファイルに各キーに対する値を取得して書き込み |
|
使用コントロール | Button1 Button2 |
その他条件 | WindowsXP(Vista) Visual Basic 2005(VB2008) WindowsXP(SP2) Visual Basic 2005(E E) Framework 2.0 |
1.INI ファイルから読み込み
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 'INI ファイルから読み込み '戻り値(文字列)を受け取るバッファーを準備 Dim strBuffer As New System.Text.StringBuilder strBuffer.Capacity = 256 'バッファーのサイズを指定 Dim ret As Integer 'INIファイルよりキーの値を読み込み(整数値を取得する場合) myLeft = GetPrivateProfileInt("Form1Point", "Xpos", 0, iniFileName) myTop = GetPrivateProfileInt("Form1Point", "Ypos", 0, iniFileName) myWidth = GetPrivateProfileInt("Form1Size", "Width", 0, iniFileName) myHeight = GetPrivateProfileInt("Form1Size", "Height", 0, iniFileName) '文字列の値を取得する場合 ret = GetPrivateProfileString("Form1Text", "Text", "", _ strBuffer, strBuffer.Capacity, iniFileName) myTxt = strBuffer.ToString '結果を表示 Debug.WriteLine(myLeft) '110 Debug.WriteLine(myTop) '145 Debug.WriteLine(myWidth) '334 Debug.WriteLine(myHeight) '135 Debug.WriteLine(myTxt) 'INIファイルの読み込み・書き込み(75) End Sub |
|
2.INI ファイルに各キーに対する値を取得して書き込み Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click 'INI ファイルに各キーに対する値を取得して書き込み Dim ret As Integer '書き込みは文字列も整数値(文字列に変換して)も同じ方法で ret = WritePrivateProfileString("Form1Text", "Text", Me.Text.ToString, iniFileName) ret = WritePrivateProfileString("Form1Point", "Xpos", CStr(Me.Location.X), iniFileName) ret = WritePrivateProfileString("Form1Point", "Ypos", CStr(Me.Location.Y), iniFileName) ret = WritePrivateProfileString("Form1Size", "Width", CStr(Me.Width), iniFileName) ret = WritePrivateProfileString("Form1Size", "Height", CStr(Me.Height), iniFileName) '書き込んだ結果をメモ帳で見ると下記のようになっています。 ' [Form1Text] ' Text = INIファイルの読み込み・書き込み(75) ' [Form1Point] ' Xpos = 110 ' Ypos = 145 ' [Form1Size] ' Width = 334 ' Height = 135 End Sub |
|
読み書き、共通分(APIの宣言及び変数の宣言) '-------- 下記の位置に名前空間を定義 ----------------------
Imports System.Runtime.InteropServices Public Class Form1 Inherits System.Windows.Forms.Form '------------------------------------------------------------
'指定のINIファイルから文字列を取得する(P989)
<DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _ Public 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ファイルの指定のキーの文字列を変更する(P994) <DllImport("KERNEL32.DLL")> _ Public Shared Function WritePrivateProfileString( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpString As String, _ ByVal lpFileName As String) As Integer End Function '指定のINIファイルから整数値を取得する(P986) <DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _ Public Shared Function GetPrivateProfileInt( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal nDefault As Integer, _ ByVal lpFileName As String) As Integer End Function Private myLeft, myTop, myWidth, myHeight As Integer, myTxt As String Private iniFileName As String Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load iniFileName = "Test.ini" 'INIファイル名(直接フルパスを指定してもOK) 'INI ファイルをプログラムと同じフォルダーに置く場合 'ルートディレクトリかの判断 Dim MyPath As String = Application.StartupPath If MyPath.EndsWith("\") = False Then MyPath &= "\" End If iniFileName = MyPath & iniFileName End Sub |
|
.NETでは INIファイルやレジストリへの書き込みより、XMLファイルを使用するように推薦されているようですが、VB6.0ユーザーには慣れ親しんだ
INI ファイルが扱いやすいのと、VB6.0のプログラムを移行した場合等で結構質問があるようなので、試して見ました。 次は、XMLファイルも試して見ます。 挑戦される方は下記のサイトで詳しく解説しておられますので参考にして下さい。 http://www.atmarkit.co.jp/fdotnet/easyxml/index/index.html http://dobon.net/vb/dotnet/file/xmlserializer.html |