2005年12月28日

INIファイルの読み書き

VB6ではプログラムの動作環境を保存しておくのに、レジストリを使わない方法としてよく利用した。Win32APIを使うが、VB.NETもほとんど同じである。
※サンプルソースのダウンロードができます。VB6_INI.lzhVBNET_INI.lzh

VB6
Private Declare Function GetPrivateProfileString _
Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpAppName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
 
Private Declare Function WritePrivateProfileString _
Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpAppName As String, _
ByVal lpKeyName As Any, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long

 
Public Function GetIni(ApName As String, KeyName As String, _
Default As String, Filename As String _
) As String
'INIファイルから参照したいキーの値を取得する
'ApName : セクション名
'KeyName : 項目名
'Default : 項目が存在しない場合の初期値
'FileName : 参照ファイル名
'****************************************
Dim strResult As String
strResult = Space$(255)
Call GetPrivateProfileString(ApName, KeyName, Default, _
strResult, Len(strResult), _
Filename)
GetIni = Left$(strResult, InStr(strResult, Chr$(0)) - 1)
End Function
 
Public Sub PutIni(ApName As String, KeyName As String, _
Param As String, Filename As String)
'INIファイルに新たなキーの値を書込む
' ※既存のキーがあれば更新・なければ新規作成する
'ApName : セクション名
'KeyName : 項目名
'Param : 更新する値
'FileName : 書出ファイル名
'****************************************
Call WritePrivateProfileString(ApName, KeyName, _
Param, Filename)
End Sub
 
Private Sub Command1_Click()
PutIni "TEST", "Item", "テスト", "C:\test.ini"
End Sub
 
Private Sub Command2_Click()
Dim strVar As String
strVar = GetIni("TEST", "Item", "", "C:\test.ini")
MsgBox ("test.iniの内容=" & strVar)
End Sub
 
VB.NET
Declare Function WritePrivateProfileString _
Lib "KERNEL32.DLL" Alias "WritePrivateProfileStringA" ( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As Integer
 
Declare Function GetPrivateProfileString _
Lib "KERNEL32.DLL" Alias "GetPrivateProfileStringA" ( _
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

 
Public Function GetIni(ByVal ApName As String, _
ByVal KeyName As String, _
ByVal Defaults As String, _
ByVal Filename As String _
) As String
'INIファイルから参照したいキーの値を取得する
'ApName : セクション名
'KeyName : 項目名
'Default : 項目が存在しない場合の初期値
'FileName : 参照ファイル名
'****************************************
Dim strResult As String = Space(255)
Call GetPrivateProfileString(ApName, KeyName, Defaults, _
strResult, Len(strResult), _
Filename)
GetIni = Microsoft.VisualBasic.Left(strResult, _
InStr(strResult, Chr(0)) - 1)
End Function
 
Public Sub PutIni(ByVal ApName As String, _
ByVal KeyName As String, _
ByVal Param As String, _
ByVal Filename As String)
'INIファイルに新たなキーの値を書込む
' ※既存のキーがあれば更新・なければ新規作成する
'ApName : セクション名
'KeyName : 項目名
'Param : 更新する値
'FileName : 書出ファイル名
'****************************************
Call WritePrivateProfileString(ApName, KeyName, _
Param, Filename)
End Sub
 
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
PutIni("TEST", "Item", "テスト2", "C:\test.ini")
End Sub
 
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Dim strVar As String
strVar = GetIni("TEST", "Item", "", "C:\test.ini")
MsgBox("test.iniの内容=" & strVar)
End Sub


VB.NETのWin32APIの使い方はVB6とほとんど同じように使えるが、別の宣言の仕方もある。
MicrosoftのVBマイグレーションTipsにはその方法が記載されている。
posted by なっちゃん at 19:09| 静岡 晴れ| Comment(4) | TrackBack(0) | VB vs VB.NET | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
業務でiniファイルの操作が必要になり、情報を検索しているときに偶然見つけました。

大変わかりやすく勉強になりました。

動作テストにてここのソース(VB.NET)をそのままコピペして使用してみたところ、普通に使えたためにそのまま利用させていただきたいのですがよろしいでしょうか?

上記のメールアドレスにお返事いただけると幸いです。
Posted by 寺戸 法隆 at 2006年07月19日 17:45
すみません、iniファイルを相対パスで指定するにはどの様に変更すればよいのでしょうか?

GetIni("TEST", "Item", "", "App.Path & "¥test.ini")
ではエラーが出ますのでご教授お願いします。
Posted by guest at 2009年02月14日 14:38
解決しました。
普通にHTMLと同じ相対パスの書き方で良かったのですね^^;
お騒がせしてすみません。
Posted by guest at 2009年02月14日 15:14
ありがとう!
Posted by jyo at 2009年06月17日 13:19
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/11120494
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック