Skip to content

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

概述 ​

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

核心特性 ​

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

属性 ​

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

方法 ​

Section ​

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

vb
Public Property Get Section(ByVal key As String) As 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版权为微软公司所有