C#使用API读写ini配置文件详解

沈亦白
沈亦白
发布时间:2026-10-15 | 4人浏览过
原创

C#原生库不直接提供对.ini文件的完整读写支持,但可以通过引入Windows系统底层的kernel32.dll API轻松实现。本文将展示如何封装读写函数,并在WinForm窗体中完成对配置节点、属性及值的写入与查询操作。

实践环境准备

开发基于WinForm框架的.NET应用程序。在代码文件中需引入 System.Runtime.InteropServices 以支持DllImport功能。 ini文件通常位于程序运行目录的子文件夹下,本例中演示了从启动路径向上回溯两级的逻辑。

核心步骤详解

第1步:编写INI写入模块

目的:将指定的节(Section)、键(Key)及其值写入本地ini文件。

入口:项目源代码主逻辑类或公共静态工具类。

动作:

  1. 声明外部函数接口,映射到 kernel32 中的 WritePrivateProfileString。
  2. 封装公共方法 IniWriteValue,接收段名、键名、新值和文件路径。
  3. 调用平台调用服务执行写入。

参数说明:

  • section:配置文件的分组名称(如[Database])。
  • key:具体的配置项名称(如ServerIP)。
  • value:要保存的数据字符串。

重要参数与完整代码:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    // 引入Kernel32 API用于写入
    [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

    public static void IniWriteValue(string section, string key, string value, string path)
    {
        WritePrivateProfileString(section, key, value, path);
    }

    // 定义ini文件存放路径变量
    string strg;

    private void Form1_Load(object sender, EventArgs e)
    {
        // 获取当前程序运行路径并定位到上一级目录的Test.ini文件
        strg = Application.StartupPath.ToString();
        strg = strg.Substring(0, strg.LastIndexOf("\\"));
        strg = strg.Substring(0, strg.LastIndexOf("\\"));
        strg += @"\Test.ini";
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // 校验输入框非空后执行写入
        if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "")
        {
            IniWriteValue(textBox1.Text.Trim(), textBox2.Text.Trim(), textBox3.Text.Trim(), strg);
            MessageBox.Show("写入成功");
        }
    }
}

第2步:编写INI读取模块

目的:根据给定的section和key从ini文件中提取对应的value值。

入口:同上项目类文件中。

动作:

  1. 声明外部函数接口,映射到 kernel32 中的 GetPrivateProfileString。
  2. 创建 SbtringBuilder 对象作为缓冲器接收返回结果。
  3. 调用API并将缓冲区内容转换为字符串返回。

关键参数与完整代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    string strg;

    // 引入Kernel32 API用于读取,注意返回值类型与参数类型不同
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);

    public static string IniReadValue(string section, string key, string path)
    {
        // 初始化容量为255的StringBuilder作为接收缓冲区
        StringBuilder temp = new StringBuilder(255);
        // 调用API,若未找到则返回默认值 ""
        int i = GetPrivateProfileString(section, key, "", temp, 255, path);
        return temp.ToString();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        strg = Application.StartupPath.ToString();
        strg = strg.Substring(0, strg.LastIndexOf("\\"));
        strg = strg.Substring(0, strg.LastIndexOf("\\"));
        strg += @"\Test.ini";
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // 点击读取按钮,将查询到的值填入界面显示
        textBox3.Text = IniReadValue(textBox1.Text.Trim(), textBox2.Text.Trim(), strg);
    }
}

完成判断

成功编译并运行程序后:

  1. 在“节点”输入框填写段落名(例如Network)。
  2. 在“属性”输入框填写字段名(例如IP)。
  3. 在“属性值”输入框填写数据(例如192.168.1.1),点击“写入”会提示成功,且本地 Test.ini 产生对应记录。
  4. 重新打开应用或继续操作,选中已存在的节点和属性,点击“读取”,对应的“属性值”文本框将自动填充原有数据。

简要总结

上述是C#实现读写ini配置文件的方法详细内容,更多关于C#读写ini配置文件的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表