Skip to content

VBMAN.Ini - INI 配置文件操作对象

概述

VBMAN.Ini 提供了方便的 INI 配置文件读写功能,支持多级节点、多行文本,以及自动路径处理。

核心特性

  • 多级节点: 支持 [Section]Key=Value 结构
  • 多行文本: 支持包含换行符的配置值
  • 链式调用: 流畅的 API 设计
  • 自动编码: 支持 UTF-8 等编码格式
  • 路径记忆: LoadFrom 后可省略路径直接 SaveTo

属性

属性类型说明
RootScripting.Dictionary根字典对象(默认成员)
LastErrorString最后错误信息

方法

Section

获取或创建节点(返回字典)

vb
Public Property Get Section(ByVal key As String) As Scripting.Dictionary

示例:

vb
' 读取节点
Dim serverIP As String
serverIP = VBMAN.Ini.Section("Server")("IP")

' 写入节点
VBMAN.Ini.Section("Server")("IP") = "192.168.1.1"
VBMAN.Ini.Section("Server")("Port") = "8080"

' 链式设置
With VBMAN.Ini.Section("Database")
    .Item("Host") = "localhost"
    .Item("Name") = "mydb"
    .Item("User") = "admin"
End With

MultiLineText

读写多行文本(自动处理换行符转义)

vb
Public Property Get MultiLineText(ByVal SectionName As String, ByVal KeyName As String) As String
Public Property Let MultiLineText(ByVal SectionName As String, ByVal KeyName As String, ByVal Text As String)

说明: 自动将 \r\n 与实际的换行符 vbCrLf 互相转换

示例:

vb
' 写入多行文本
Dim notice As String
notice = "系统维护通知" & vbCrLf & _
         "时间:2024-01-01 00:00" & vbCrLf & _
         "内容:服务器升级"

VBMAN.Ini.MultiLineText("Notify", "Content") = notice

' 读取多行文本
Dim content As String
content = VBMAN.Ini.MultiLineText("Notify", "Content")
TextBox1.Text = content

LoadFrom

从文件加载 INI

vb
Public Function LoadFrom(ByVal Path As String, Optional CharSet As String = "UTF-8") As cIni

参数:

  • Path - 文件路径
  • CharSet - 字符编码(默认UTF-8)

示例:

vb
' 基本加载
VBMAN.Ini.LoadFrom App.Path & "\\config.ini"

' 链式调用
With VBMAN.Ini
    .LoadFrom App.Path & "\\config.ini"
    Debug.Print .Section("Server")("IP")
End With

SaveTo

保存到文件

vb
Public Function SaveTo(Optional ByVal Path As String, Optional CharSet As String = "UTF-8") As Boolean

说明: 如果省略 Path,使用上次 LoadFrom 的路径

示例:

vb
' 保存到指定路径
VBMAN.Ini.SaveTo "C:\\config.ini"

' 保存到上次加载的路径(推荐)
VBMAN.Ini.SaveTo

' 完整示例
With VBMAN.Ini
    .LoadFrom App.Path & "\\config.ini"
    .Section("Settings")("Theme") = "Dark"
    .SaveTo  ' 自动保存到原路径
End With

Password

设置加密密码(链式调用)

vb
Public Function Password(ByVal Pwd As String) As cIni

示例:

vb
' 设置密码(功能预留)
VBMAN.Ini.Password("mysecret").LoadFrom "config.ini"

综合示例

示例1: 读写服务器配置

vb
Private Sub SaveServerConfig()
    With VBMAN.Ini
        ' 加载或创建配置
        .LoadFrom App.Path & "\\server.ini"
        
        ' 写入服务器配置
        With .Section("Server")
            .Item("IP") = TextIP.Text
            .Item("Port") = TextPort.Text
            .Item("Timeout") = "30"
        End With
        
        ' 写入数据库配置
        With .Section("Database")
            .Item("Host") = "localhost"
            .Item("Port") = "3306"
            .Item("Name") = "production"
        End With
        
        ' 保存
        If .SaveTo Then
            MsgBox "配置保存成功!"
        Else
            MsgBox "保存失败: " & .LastError
        End If
    End With
End Sub

Private Sub LoadServerConfig()
    With VBMAN.Ini
        .LoadFrom App.Path & "\\server.ini"
        
        TextIP.Text = .Section("Server")("IP")
        TextPort.Text = .Section("Server")("Port")
    End With
End Sub

示例2: 读取公告信息

vb
' 在实际项目中的使用示例(来自 cs-auther 案例)
Private Sub LoadNotice()
    VBMAN.Ini.LoadFrom App.Path & "\\config.ini"
    
    ' 检查是否存在公告
    If VBMAN.Ini.Root.Exists("Notify") Then
        TextTitle.Text = VBMAN.Ini("Notify")("Title")
        TextContent.Text = VBMAN.Ini.MultiLineText("Notify", "Content")
        LabelTime.Caption = VBMAN.Ini("Notify")("Time")
    End If
End Sub

Private Sub SaveNotice()
    VBMAN.Ini.Section("Notify")("Title") = TextTitle.Text
    VBMAN.Ini.MultiLineText("Notify", "Content") = TextContent.Text
    VBMAN.Ini.Section("Notify")("Time") = Format(Now, "yyyy-MM-dd hh:mm:ss")
    VBMAN.Ini.SaveTo
End Sub

示例3: 删除节点

vb
Private Sub ClearNotice()
    VBMAN.Ini.LoadFrom App.Path & "\\config.ini"
    
    ' 删除整个 Notify 节点
    If VBMAN.Ini.Root.Exists("Notify") Then
        VBMAN.Ini.Root.Remove "Notify"
    End If
    
    VBMAN.Ini.SaveTo
End Sub

示例4: 遍历所有配置

vb
Private Sub ShowAllConfig()
    VBMAN.Ini.LoadFrom App.Path & "\\config.ini"
    
    Dim sectionKey As Variant
    Dim key As Variant
    
    ' 遍历所有节点
    For Each sectionKey In VBMAN.Ini.Root.Keys
        Debug.Print "[" & sectionKey & "]"
        
        ' 遍历节点内所有键值
        For Each key In VBMAN.Ini.Root(sectionKey).Keys
            Debug.Print "  " & key & " = " & VBMAN.Ini.Root(sectionKey)(key)
        Next key
    Next sectionKey
End Sub

INI 文件格式示例

ini
[Server]
IP=192.168.1.100
Port=8080
Timeout=30

[Database]
Host=localhost
Port=3306
Name=mydb
User=admin
Password=secret

[Notify]
Title=系统公告
Time=2024-01-15 10:30:00
Content=系统将于今晚进行维护
预计耗时2小时
请提前保存工作

最佳实践

  1. 使用 App.Path: 配置文件建议放在程序目录下
  2. 检查节点存在性: 读取前先检查节点是否存在避免错误
  3. 使用 MultiLineText: 多行内容使用专用方法处理换行符
  4. 错误处理: 文件操作可能失败,建议添加错误处理
  5. 定期保存: 修改配置后及时调用 SaveTo

注意事项

  • 节点名和键名区分大小写
  • 值中的前导/尾随空格会被去除
  • 支持 ; 开头的注释行(读取时自动忽略)
  • 空行会被忽略

VB6及其LOGO版权为微软公司所有