VB读写ini文件(1)
自从注册表诞生以来ini文件正在逐渐失去其市场占有率,然而基于ini文件的独立性,致使其还没有到达退出历史舞台的地步,很多应用程序的初始化和一些界面参数的设置仍然很愿意从ini文件中读取,为了保证操作需用参数对ini文件的读取的通明性,建议使用一个模块来完成此工作。注:所有操作调用标准的Win API函数来完成。 Dim Ret As Long Dim Start As Long Public FileName As String Const BufSize = 10240 Dim buf As String * BufSize Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String,ByVal lpKeyName As String,ByVal nDefault As Long,ByVal lpFileName As String) As Long Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String,ByVal lpReturnedString As String,ByVal nSize As Long,ByVal lpFileName As String) As Long Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,ByVal lpKeyName As Any,ByVal lpDefault As String,ByVal lpFileName As String) As Long Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String,ByVal lpString As String,ByVal lpFileName As String) As Long Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String,ByVal lpString As Any,ByVal lpFileName As String) As Long Public Sub SetValue(ByVal clsName As String,ByVal key As String,ByVal V As String) Ret = WritePrivateProfileString(clsName,key,V,FileName) End Sub Public Function GetValue(ByVal clsName As String,ByVal key As String) As String Ret = GetPrivateProfileString(clsName,"",buf,BufSize,FileName) Start = 1 GetValue = RetStr() End Function Private Function RetStr() As String Dim i As Long i = InStr(Start,Chr(0)) If i > Start Then RetStr = Mid(buf,Start,i - Start) End If Start = i + 1 End Function 至此已经完成了对一个完整的独立模块的封装,接下来就来看看怎么引用(其实看完上面程序就明了了)
VB读写ini文件(2)
INI 文件是什么样子?——不会吧,这都不知道。INI 文件就是 Windows 中常见的以 .ini 为扩展名的文件,其内部格式和各部分的名称如下: [Section1] Key1=Value1 Key2=Value2 Key3=Vlaue3 [Section2] Key1=Value1 Key2=Value5 Key4=Value4 Key5=... ... INI 文件中分若干个段 (Section),每个段中有若干个键 (Key) 值 (Value) 对。一个键值对保存一个信息;段则将属性类似的一些键值对组织在一起。同一个段中不能出现两次以上同样的键,但不同的段中可以出现相同的键。 现在明白了吗?要是还不明白,就到 Windows 里找两个 INI 文件看看,文本编辑器就可以打开的。明白了 INI 文件就要开始学习怎样在 VB 中读写 INI 了。 VB 读写 INI 文件,难吗?不难,因为 Windows 已经为我们做好了一切,我们只需要调用它的 API 函数就可以了。为了读写 INI 文件,我们可能用到以下 API 函数: GetPrivateProfileInt GetPrivateProfileString WritePrivateProfileString 其中 WritePrivateProfileString 是用来向 INI 文件写信息的,而 GetPrivateProfileInt 和 GetPrivateProfileString 则是用来从 INI 文件中读信息的,前者用于读取整型数据,后者则用于读取字符串型数据。 上述三个 API 函数在 VB 中的申明和说明如下: Private Declare Function GetPrivateProfileInt Lib "kernel32" _ Alias "GetPrivateProfileIntA" ( _ ' 返回所读取的长整型值 ByVal lpApplicationName As String,_ ' 要读取的段 (Section) 名称 ByVal lpKeyName As String,_ ' 要读取的的键 (Key) 名称 ByVal nDefault As Long,_ ' 指定默认值,如果读取时出错,则返回该值 ByVal lpFileName As String) As Long ' 指定要读的 INI 文件名 Private Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" ( _ ' 返回所读取的字符串值的真实长度 ByVal lpApplicationName As String,_ ' 要读取的段 (Section) 名称 ByVal lpKeyName As Any,_ ' 要读取的的键 (Key) 名称 ByVal lpDefault As String,_ ' 指定默认值,如果读取时出错,则返回该值 ByVal lpReturnedString As String,_ ' 指定接收返回值的字符串变量 ByVal nSize As Long,_ ' 指定允许字符串值的最大长度 ByVal lpFileName As String) As Long ' 指定要读的 INI 文件名 Private Declare Function WritePrivateProfileString Lib "kernel32" _ Alias "WritePrivateProfileStringA" ( _ ' 如果成功返回非 0 值,失败返回 0 ByVal lpApplicationName As String,_ ' 要写入的段 (Section) 名称 ByVal lpKeyName As Any,_ ' 要写入的的键 (Key) 名称 ByVal lpString As Any,_ ' 要写入的值 (Value),以字符串表示 ByVal lpFileName As String) As Long ' 指定要写的 INI 文件名 我们的目的是要在 VB 中写一个读写 INI 文件的类,所以在 VB 中新建一个工程,并添加一个类模块 (Class Module),命令类为 CIniFile,并且将上面的申明添加到类模块中。然后开始为类添加属性和方法。 从上面的注释中,我们可以知道,每次调三个 API 之一都需要指定 INI 文件名。而在我们的 CIniFile 的每一个实例中,应该始终访问同一个 INI 文件,所以属性之一就是文件名: Private IniFileName As String 另外,调用 API 的过程中可能会出现错误,那么 CIniFile 应该能提供错误信息,所以定义一个保存错误信息的变量作为 CIniFile 的第二个属性 Public ErrorMsg As String 由于访问什么段、什么键以及写入什么值都可以通过参数的形式传递给方法,而获取的值也都可以通过方法的返回值得以,所以不再需要其它属性了。不过在定义方法之前还需要对属性进行初始化: 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 文件" |