不用API操作INI文件

'作    者:Snail
'模块说明:读取与替换ini项数据

引用内容 引用内容

Option Explicit

Public Type iniFiles
    iniValue
As String
'项值
    
iniType As String  '项名
End Type

Public iniFile() As iniFiles

'函数名称  : ReadINI(iPath,TagType,iniFileValue())
'举    例  : ReadINI(文件路径,标签名,数值())
'作    用  : 读取ini文件指定标签中的所有数据
Public Function ReadINI(iPath As String, TagType As String, iniFileValue() As iniFiles) As Boolean
    Dim
iFile As Integer, LoadBytes() As Byte
    Dim
iniTmpFile As String, iniTmp As String
'临时存储
    
Dim iniData() As iniFiles '最后赋值

    
Dim FstSearch As String, EndSearch As String  '开始/最后
    
Dim FstPos As Long, EndPos As Long '开始/最后
    
Dim MidPos As Long, NexPos As Long '中间/下一
    
Dim LenFst As Integer, NowPos As Integer
    
'从数据文件中读取信息,加入到iniFileValue()中
    
If Dir(iPath) <> "" Then
        
'打开文件 开始
        
iFile = FreeFile
        Open iPath
For Binary As #iFile
            
ReDim LoadBytes(1 To LOF(iFile)) As Byte
            Get
#iFile, , LoadBytes
        
Close #iFile
        
iniTmpFile = StrConv(LoadBytes, vbUnicode)
'先全部读取   在对字符串进行操作
        '打开文件 结束
        '[标签0]...[标签1]...[标签2]...[标签3]
        
FstSearch = UCase("[" & TagType & "]" & vbCrLf) '设置开始 字符
        
EndSearch = UCase(vbCrLf & "[")                  '设置结束 字符
        
LenFst = Len(FstSearch)
        
        
ReDim iniData(Len(iniTmpFile)) As iniFiles
        
        FstPos = InStr(UCase(iniTmpFile), FstSearch)                  
'查找 开始字符 StaTag 的位置
        
EndPos = InStr(FstPos + LenFst, UCase(iniTmpFile), EndSearch) '查找 最后字符 EndTag 的位置
        
If EndPos = 0 Then EndPos = Len(iniTmpFile) + 1               '查找 错误 EndPos = 最后位置
        
        
If FstPos > 0 And EndPos > FstPos Then
            
iniTmp = Mid$(iniTmpFile, FstPos + LenFst, EndPos - (FstPos + LenFst))
'获取 区域字符串
            
            
FstPos = 1: NowPos = 0
            
MidPos = InStr(iniTmp, "=")                
'查找 开始字符 StaTag 的位置
            
            
EndPos = InStr(MidPos + 1, iniTmp, vbCrLf)  '查找 结束字符 EndTag 的位置
            
If EndPos = 0 Then EndPos = Len(iniTmp) + 1 '查找 错误 EndPos = 最后位置
            
            
NexPos = InStr(EndPos + 1, iniTmp, "=")     '查找 最后字符 EndTag 的位置
            
If NexPos = 0 Then NexPos = Len(iniTmp)     '查找 错误 EndPos = 最后位置
            
            
iniData(NowPos).iniType = Trim$(Mid$(iniTmp, FstPos, MidPos - FstPos))      '获取 "Type = Value" 的 Type
            
iniData(NowPos).iniValue = Trim$(Mid$(iniTmp, MidPos + 1, EndPos - MidPos)) '获取  "Type = Value" 的 Value
            '循环查找
            
While NexPos > 0 And NexPos <> Len(iniTmp)
                FstPos = EndPos + Len(vbCrLf): NowPos = NowPos +
1
                
MidPos = InStr(FstPos, iniTmp, "=")        
'查找 开始字符 StaTag 的位置
                
                
EndPos = InStr(MidPos + 1, iniTmp, vbCrLf)  '查找 结束字符 EndTag 的位置
                
If EndPos = 0 Then EndPos = Len(iniTmp) + 1 '查找 错误 EndPos = 最后位置
                
                
NexPos = InStr(EndPos + 1, iniTmp, "=")     '查找 最后字符 EndTag 的位置
                
If NexPos = 0 Then NexPos = Len(iniTmp)     '查找 错误 EndPos = 最后位置
                
                
iniData(NowPos).iniType = Trim$(Mid$(iniTmp, FstPos, MidPos - FstPos))      '获取 "Type = Value" 的 Type
                
iniData(NowPos).iniValue = Trim$(Mid$(iniTmp, MidPos + 1, EndPos - MidPos)) '获取  "Type = Value" 的
            
Wend
        
Else
            
NowPos = 0
            
iniData(NowPos).iniType = "Null"
            
iniData(NowPos).iniValue = "Null"
        
End If
        
        ReDim
iniFileValue(NowPos) As iniFiles
        
For iFile = 0 To NowPos
            iniFileValue(iFile) = iniData(iFile)
        
Next iFile
        ReadINI =
True
    End If
End Function

'函数名称  : ReplaceINI(iPath,TagType,iniFileValue())
'举    例  : ReplaceINI(文件路径,标签名,数值())
'作    用  : 替换ini文件指定标签中的所有数据
Function ReplaceINI(iPath As String, TagType As String, iniFileValue() As iniFiles)
    
Dim iFile As Integer
    Dim
FstSearch As String, EndSearch As String  
'开始/最后
    
Dim FstPos As Long, EndPos As Long '开始/最后
    
Dim iniTmp As String, iniTmpFile(1) As String
    Dim
iniFile As String
    
    If
Dir(iPath) <> "" Then
        
'打开文件 开始
        
iFile = FreeFile
        Open iPath
For Binary As #iFile
            
ReDim LoadBytes(1 To LOF(iFile)) As Byte
            Get
#iFile, , LoadBytes
        
Close #iFile
        
iniTmp = StrConv(LoadBytes, vbUnicode)
'先全部读取   在对字符串进行操作
        '打开文件 结束
        '[标签0]...[标签1]...[标签2]...[标签3]
        
FstSearch = UCase("[" & TagType & "]" & vbCrLf) '设置开始 字符
        
EndSearch = UCase(vbCrLf & "[")                  '设置结束 字符
        
        
FstPos = InStr(UCase(iniTmp), FstSearch)             '查找 开始字符 StaTag 的位置
        
If FstPos = 0 Then FstPos = Len(iniTmp) + 1          '查找 错误 StaTag = 最后位置
        
EndPos = InStr(FstPos + 1, UCase(iniTmp), EndSearch) '查找 最后字符 EndTag 的位置
        
If EndPos = 0 Then EndPos = Len(iniTmp) + 1          '查找 错误 EndPos = 最后位置
        
        
If FstPos > Len(vbCrLf) Then FstPos = FstPos - Len(vbCrLf) + 1
        
        
If EndPos > Len(vbCrLf) Then EndPos = EndPos + Len(vbCrLf)
        
If FstPos <> 1 Then
            
iniTmpFile(0) = Mid$(iniTmp, 1, FstPos)
'文件头
        
End If
        
iniTmpFile(1) = Mid$(iniTmp, EndPos, Len(iniTmp) + 1)
'文件尾
    
Else
        
iniTmpFile(0) = "": iniTmpFile(1) = ""
    
End If
    
    
iniFile = iniTmpFile(0)
'增加文件头
    
iniFile = iniFile & "[" & TagType & "]" & vbCrLf
    
For iFile = 0 To UBound(iniFileValue)
            iniFile = iniFile & iniFileValue(iFile).iniType &
" = " & iniFileValue(iFile).iniValue & vbCrLf
    
Next iFile
    
    
If iniTmpFile(1) <> "" Then
        
iniFile = iniFile & iniTmpFile(1)
'增加文件尾
    
Else
        
iniFile = Mid$(iniFile, 1, Len(iniFile) - Len(vbCrLf))
'过滤最后的回车键
    
End If
    
    
iFile = FreeFile
    Open iPath
For Output As #iFile
        
Print #iFile, iniFile
    
Close #iFile
End Function



[本日志由 JiaJia 于 2008-03-29 05:08 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: VB INI
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.