Private Sub Class_Initialize()
IniFileName = vbNullString
ErrorMsg = vbNullString
End Sub
为了指定 INI 文件名给 CIniFile,需要定义一个方法:
Public Sub SpecifyIni(FilePathName)
IniFileName = Trim(FilePathName)
End Sub
在每次读写值之前还需要先判断是否已经指定了 INI 文件名,不然读什么写什么啊
?
Private Function NoIniFile() As Boolean
NoIniFile = True
If IniFileName = vbNullString Then
ErrorMsg = "没有指定 INI 文件"
Exit Function
End If
ErrorMsg = vbNullString
NoIniFile = False
End Function
准备工作完成,现在才是重头戏,读写 INI 文件。似乎“写”要简单一些,就先“
写”吧:
Public Function WriteString(Section As String, key As String, Value As
String) As Boolean
WriteString = False
If NoIniFile() Then
Exit Function
End If
If WritePrivateProfileString(Section, key, Value, IniFileName) = 0
Then
ErrorMsg = "写入失败"
Exit Function
End If
WriteString = True
End Function
Public Function ReadString(Section As String, key As String, Size As
Long) As String
Dim ReturnStr As String
Dim ReturnLng As Long
ReadString = vbNullString
If NoIniFile() Then
Exit Function
End If
ReturnStr = Space(Size)
ReturnLng = GetPrivateProfileString(Section, key, vbNullString,
ReturnStr, Size, IniFileName)
ReadString = Left(ReturnStr, ReturnLng)
End Function
这个方法在 INI 文件中读取一个键值,作为字符串返回。如果参数 Size 给定的
大小不够,将不能返回完整的值串,但不会有任何提示。
写这个函数的关键在 ReturnStr 的初始化和取值上。VB 中是不需要对字符串进行
初始化的,也不需要分配空间。但是这里如果不将它初始化为一个足够长的字符串,就
不能正确返回结果。这和 C 语言的字符串有关,就不多说了。ReturnStr 的取值也需要
有趣,要使用 Left() 函数将其截断。如果不截断,取得的结果字符串就会有 Size 那
么长,除了取得的值以外,其余部分都是用空格填充的。其原因与前面一点相同,与 C
语言的字符串有关。当然 Left() 函数也可以使用 Trim() 代替,效果是一样的。
最后我们不得不面对这个最麻烦的 ReadInt 方法了。它为什么麻烦呢?看看现在的
函数定义就知道了:
Public Function ReadInt(Section As String, key As String) As Long
Dim ReturnLng As Long
ReadInt = 0
ReturnLng = GetPrivateProfileInt(Section, key, 0, IniFileName)
If ReturnLng = 0 Then
ReturnLng = GetPrivateProfileInt(Section, key, 1, IniFileName)
If ReturnLng = 1 Then
ErrorMsg = "不能读取"
Exit Function
End If
End If
ReadInt = ReturnLng
End Function