玄関へお回り下さい。
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 StringAs 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 StringAs 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 StringAs 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 






2004/05/20
2006/01/19


VBレスキュー(花ちゃん)
VB.NET2003  VB2005