VB读写INI文件的四个函数'文件名SourceDB.ini文件 Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName 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 lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long '以下两个函数,读/写ini文件,固定节点setting,in_key为写入/读取的主键 '仅仅针对是非值 'Y:yes,N:no,E:error Public Function GetIniTF(ByVal In_Key As String) As Boolean On Error GoTo GetIniTFErr GetIniTF = True Dim GetStr As String GetStr = VBA.String(128, 0) GetPrivateProfileString "Setting", In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini" GetStr = VBA.Replace(GetStr, VBA.Chr(0), "") If GetStr = "1" Then GetIniTF = True GetStr = "" Else GoTo GetIniTFErr End If Exit Function GetIniTFErr: Err.Clear GetIniTF = False GetStr = "" End FunctionPublic Function WriteIniTF(ByVal In_Key As String, ByVal In_Data As Boolean) As Boolean On Error GoTo WriteIniTFErr WriteIniTF = True If In_Data = True Then WritePrivateProfileString "Setting", In_Key, "1", App.Path & "\SourceDB.ini" Else WritePrivateProfileString "Setting", In_Key, "0", App.Path & "\SourceDB.ini" End If Exit Function WriteIniTFErr: Err.Clear WriteIniTF = False End Function '以下两个函数,读/写ini文件,不固定节点,in_key为写入/读取的主键 '针对字符串值 '空值表示出错 Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String On Error GoTo GetIniStrErr If VBA.Trim(In_Key) = "" Then GoTo GetIniStrErr End If Dim GetStr As String GetStr = VBA.String(128, 0) GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini" GetStr = VBA.Replace(GetStr, VBA.Chr(0), "") If GetStr = "" Then GoTo GetIniStrErr Else GetIniStr = GetStr GetStr = "" End If Exit Function GetIniStrErr: Err.Clear GetIniStr = "" GetStr = "" End FunctionPublic Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean On Error GoTo WriteIniStrErr WriteIniStr = True If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then GoTo WriteIniStrErr Else WritePrivateProfileString AppName, In_Key, In_Data, App.Path & "\SourceDB.ini" End If Exit Function WriteIniStrErr: Err.Clear WriteIniStr = False End Function
数对ini文件的读取的通明性,建议使用一个模块来完成此工作。注:所有操作调用标准的Win API函数来完成。Dim Ret As LongDim Start As LongPublic FileName As StringConst BufSize = 10240Dim buf As String * BufSizePrivate 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 lpReturnedString As String, ByVal nSize As Long, 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 lpKeyName As Any, 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 StringRet = GetPrivateProfileString(clsName, key, "", buf, BufSize, FileName)Start = 1GetValue = RetStr()End Function Private Function RetStr() As StringDim i As Longi = InStr(Start, buf, Chr(0))If i > Start ThenRetStr = Mid(buf, Start, i - Start)End IfStart = i + 1End Function
你们写得也太复杂了! '读INI的API函數 Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long'自定义读取INI函數<Shepherd.ini> Public Function ReadINI(ByVal Section As String, ByVal Key As String) As String Dim X As Long, Buff As String * 128, i As Integer X = GetPrivateProfileString(Section, Key, "", Buff, 128, App.Path + "\ini\shepherd.ini") i = InStr(Buff, Chr(0)) ReadINI = Trim(Left(Buff, i - 1)) End Function调用就行了,不过INI文件格式要和楼上的一样
申明方式:
DeclareFunctionWriteFileLib"kernel32"Alias"WriteProfileString A"(ByVallpszSectionAsString,ByVallpszKeyNameAsString,ByVallp szStringAsString)AsLong
*********
调用方式:
WriteFile"123","123","234"
[注:lpszSection为段名,lpszKeyName为键名,lpszString键值;如lpszString的值 用"vbNullString"关键字,且上一参数(lpszKeyName)的名称为同一"Section"中的 所有项,则删除这一名称(Section名同理).]
----------------------------------------------------------------------
----------------------
11.读取win.ini中的整数数据
申明方式:
DeclareFunctionGetProfileIntLib"kernel32"Alias"GetProfileIntA "(ByVallpAppNameAsString,ByVallpKeyNameAsString,ByValnDefault AsLong)AsLong
*********
调用方式:
DimValueAsLong
Value=GetProfileInt("Windows","DoubleClickSpeed",0)
(注:lpAppName为Section的名称;lpKeyName为键的名称;nDefault反回调用是否成 功.)
----------------------------------------------------------------------
----------------------
12.读取win.ini中某一Section的所有键和键值
申明方式:
DeclareFunctionGetProFileSecLib"kernel32"Alias"GetProfileSect ionA"(byVallpAppNameAsString,ByVallpReturnedStringAsString,ByV alnSizeAsLong)AsLong
*********
调用方式:
DimTxtAsString,posAsLong
Txt=String(32767,0)
GetProFileSec"windows",Txt,Len(Txt)
pos=InStr(Txt,Chr(0))
Whilepos>1
MsgBoxTxt'"MsgBox"会以Chr(0)作为输出标志
Txt=Mid(Txt,pos+1)
pos=InStr(Txt,Chr(0))
Wend
(注:lpAppName为Section的名称;lpReturnedString为读取所有的键和键值[Key名 称=键值],其之间用Chr(0)作为分割符[该字符串同样以Chr(0)作为结尾];nSize为传 入下一键值的长度;返回值为数据字节长度,且不以Chr(0)结尾.)
----------------------------------------------------------------------
----------------------
13.读取win.ini文件中的字符串
申明方式:
DeclareFunctionGetProfileStringLib"kernel32" Alias"GetProfileStringA"(ByVallpAppNameAsString,ByVallpKeyName AsString,ByVallpDefaultAsString,ByVallpReturnedStringAsStrin,ByValnSizeAsLong)AsLong
*********
调用方式:
DimSAsString,LengthAsLong
S=String(1024,0)
Length=GetProfileString("windows","programs","",S,Len(S))
S=Left(S,Length)
PrintS
DimposAsInteger
S=String(1024,0)
Length=GetProfileString("windows",vbNullString,"",S,Len(S))
S=Left(S,Length)
WhileLen(S)>0
pos=InStr(S,Chr(0))
PrintLeft(S,pos-1)
S=Mid(S,pos+1)
Wend
S=String(1024,0)
Length=GetProfileString(vbNullString,vbNullString,"",S,Len(S))
S=Left(S,Length)
WhileLen(S)>0
pos=InStr(S,Chr(0))
PrintLeft(S,pos-1)
S=Mid(S,pos+1)
Wend
(注:lpAppName,lpKeyName,lpReturnedString,nSize的作用均同上,lpDefault的 作用同nDefault;当lpAppName和lpKeyName的传入值为vbNullString时,则返回所有 的Section值;当lpAppName的值不为vbNullString且lpKeyName的值为 vbNullString时,则返回该Section的所有Key和Key值.)
--------------------------------------------------------------------------------------------
14.写入整批数据到win,ini文件中
申明方式:
DeclareFunctionWriteProfileSectionLib"kernel32"Alias"WritePro
fileSectionA"(ByVallpAppNameAsString,ByVal
lpStringAsString)AsLong
*********
调用方式:
DimSAsString,SuccessAsBoolean
S="Key1=Value1"&Chr(0)&_
"Key2=Value2"&Chr(0)&_
"Key3=Value3"&Chr(0)&Chr(0)
Success=WriteProfileSection("ProfileTest",S)
IfSuccessThen
MsgBox"写入成功!"
Else
MsgBox"写入失败!"
EndIf
(注:写入结果为"[ProfileTest]")
Key1=Value1
Key2=Value2
Key3=Value3
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName 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 lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'以下两个函数,读/写ini文件,固定节点setting,in_key为写入/读取的主键
'仅仅针对是非值
'Y:yes,N:no,E:error
Public Function GetIniTF(ByVal In_Key As String) As Boolean
On Error GoTo GetIniTFErr
GetIniTF = True
Dim GetStr As String
GetStr = VBA.String(128, 0)
GetPrivateProfileString "Setting", In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"
GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
If GetStr = "1" Then
GetIniTF = True
GetStr = ""
Else
GoTo GetIniTFErr
End If
Exit Function
GetIniTFErr:
Err.Clear
GetIniTF = False
GetStr = ""
End FunctionPublic Function WriteIniTF(ByVal In_Key As String, ByVal In_Data As Boolean) As Boolean
On Error GoTo WriteIniTFErr
WriteIniTF = True
If In_Data = True Then
WritePrivateProfileString "Setting", In_Key, "1", App.Path & "\SourceDB.ini"
Else
WritePrivateProfileString "Setting", In_Key, "0", App.Path & "\SourceDB.ini"
End If
Exit Function
WriteIniTFErr:
Err.Clear
WriteIniTF = False
End Function
'以下两个函数,读/写ini文件,不固定节点,in_key为写入/读取的主键
'针对字符串值
'空值表示出错
Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String
On Error GoTo GetIniStrErr
If VBA.Trim(In_Key) = "" Then
GoTo GetIniStrErr
End If
Dim GetStr As String
GetStr = VBA.String(128, 0)
GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"
GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
If GetStr = "" Then
GoTo GetIniStrErr
Else
GetIniStr = GetStr
GetStr = ""
End If
Exit Function
GetIniStrErr:
Err.Clear
GetIniStr = ""
GetStr = ""
End FunctionPublic Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean
On Error GoTo WriteIniStrErr
WriteIniStr = True
If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then
GoTo WriteIniStrErr
Else
WritePrivateProfileString AppName, In_Key, In_Data, App.Path & "\SourceDB.ini"
End If
Exit Function
WriteIniStrErr:
Err.Clear
WriteIniStr = False
End Function
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 lpReturnedString As String, ByVal nSize As Long, 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 lpKeyName As Any, 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 StringRet = GetPrivateProfileString(clsName, key, "", buf, BufSize, FileName)Start = 1GetValue = RetStr()End Function
Private Function RetStr() As StringDim i As Longi = InStr(Start, buf, Chr(0))If i > Start ThenRetStr = Mid(buf, Start, i - Start)End IfStart = i + 1End Function
[AA]
c:\aa\aa1.mdb
[BB]
c:\aa\aa2.mdb
[CC]
c:\aa\aa3.mdb你要根据[]中的内容取得它下面子项的内容.
'读INI的API函數
Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long'自定义读取INI函數<Shepherd.ini>
Public Function ReadINI(ByVal Section As String, ByVal Key As String) As String
Dim X As Long, Buff As String * 128, i As Integer
X = GetPrivateProfileString(Section, Key, "", Buff, 128, App.Path + "\ini\shepherd.ini")
i = InStr(Buff, Chr(0))
ReadINI = Trim(Left(Buff, i - 1))
End Function调用就行了,不过INI文件格式要和楼上的一样
c:\aa\aa1.mdb
c:\aa\aa2.mdb
c:\aa\aa3.mdb
而没有发现[AA],[BB],但我看了他的程序,用了象[AA]这样的东西?