关于INI文件操作的问题
Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
我怎么用这个函数获得INI文件内
的小节名称[]以及其他的各个参数的值?
问题点数:0、回复次数:6Top
1 楼MSTOP(陈建华)回复于 2004-05-03 15:57:42 得分 0
Private Declare Function WritePrivateProfileString _
Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationname As String, ByVal _
lpKeyName As Any, ByVal lsString As Any, _
ByVal lplFilename As String) As Long
Private Declare Function GetPrivateProfileString Lib _
"kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationname As String, ByVal _
lpKeyName As String, ByVal lpDefault As _
String, ByVal lpReturnedString As String, _
ByVal nSize As Long, ByVal lpFileName As _
String) As Long
'
'读INI文件.
'函数:GetIniStr
'参数:AppName 项目名.In_Key 键名,sFileName 文件名
'返回值:成功:对应的键值.失败或不存在:""
Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal sFileName 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, sFileName
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 Function
'
'写INI文件.
'函数:WriteIniStr
'参数:AppName 项目名.In_Key 键名,In_Data 键值,sFileName 文件名
'返回值:成功=TRUE.失败=FALSE
Public Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal in_data As String, ByVal sFileName 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, sFileName
End If
Exit Function
WriteIniStrErr:
Err.Clear
WriteIniStr = False
End Function
Top
2 楼sunfanet(十年磨剑)回复于 2004-05-04 20:16:32 得分 0
再接着问一个问题:
在ini文件未知的情况下,能不能获得 所有参数的值?
另外你上面提到的 VBA 是什么?Top
3 楼faib920(Believe Oneself,Believe Lover.)回复于 2004-06-08 17:54:10 得分 0
Public Function IniGetValue(iniFileName As String, Section As String, Name As String) As String
'读取INI文件值
On Error GoTo er
Dim S As String
S = String(1024, 0)
S = Left(S, Val(GetPrivateProfileString(Section, Name, "", S, Len(S), iniFileName)))
i = InStr(S, Chr(0))
If i <> 0 Then IniGetValue = Left(S, i - 1) Else IniGetValue = S
er:
If Err.Number <> 0 Then IniGetValue = ""
End Function
Public Function IniDeleteSection(iniFileName As String, Section As String)
'删除节点
IniDeleteSection = WritePrivateProfileString(Section, vbNullString, vbNullString, iniFileName)
End Function
Public Function IniDeleteKey(iniFileName As String, Section As String, Name As String)
'删除值
IniDeleteKey = WritePrivateProfileString(Section, Name, vbNullString, iniFileName)
End Function
Public Function IniSetValue(iniFileName As String, Section As String, Name As String, Value As String) As Long
'写入INI文件值
IniSetValue = WritePrivateProfileString(Section, Name, Value, iniFileName)
End Function
Public Function IniGetAllKey(iniFileName As String, Section As String, Key() As String) As Long
'读取INI文件节下的键
On Error GoTo er
Dim ss As String
Dim pos As Integer, Count As Integer
buffer = String(32767, 0)
GetPrivateProfileSection Section, buffer, Len(buffer), iniFileName
pos = InStr(buffer, Chr(0))
Do
ReDim Preserve Key(Count)
ss = Left(buffer, pos - 1)
Key(Count) = Left(ss, InStr(1, ss, "=") - 1)
buffer = Mid(buffer, pos + 1)
pos = InStr(buffer, Chr(0))
If pos <= 1 Then Exit Do
Count = Count + 1
Loop
IniGetAllKey = Count
Exit Function
er:
ReDim Key(0)
IniGetAllKey = 0
End Function
Public Function IniGetAllSection(iniFileName As String, Section() As String) As Long
'读取INI文件所有节
On Error GoTo er
Dim Length As Long, pos As Integer, Count As Integer
buffer = String(32767, 0)
Length = GetPrivateProfileString(vbNullString, vbNullString, "", buffer, Len(buffer), iniFileName)
buffer = Left(buffer, Length)
Do
ReDim Preserve Section(Count)
pos = InStr(buffer, Chr(0))
If Left(buffer, pos - 1) = "" Then Exit Do
Section(Count) = Left(buffer, pos - 1)
buffer = Mid(buffer, pos + 1)
If Len(buffer) <= 0 Then Exit Do
Count = Count + 1
Loop
IniGetAllSection = Count
Exit Function
er:
ReDim Section(0)
IniGetAllSection = 0
End FunctionTop
4 楼MSTOP(陈建华)回复于 2004-06-10 02:54:52 得分 0
另外你上面提到的 VBA 是什么?
'---------------------------------
我有时候突然忘记VB中的某个内部函数,所以,前面加上个VBA,让它自动列出来...
Top
5 楼sworddx(.:RNPA:. hillin)回复于 2004-06-28 20:55:14 得分 0
你得用GetPrivateProfileString和WritePrivateProfileString,你说的函数是用来读写win.ini的.Top
6 楼sworddx(.:RNPA:. hillin)回复于 2004-06-28 20:56:39 得分 0
在ini文件未知的情况下,能不能获得 所有参数的值?
当然可以,把它当文本文件读,读取每行"="之前的内容就可以得到键名,然后用常规方法读取它的值.Top




