You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 基于ConfigurationBuilder编写INI文件写入扩展方法

Microsoft.Extensions.Configuration配套的INI配置提供程序仅实现了读取解析逻辑,没有提供原生的INI写入能力,这个功能不需要引入第三方库,自己按INI基础格式实现即可,和你现有的读取方法完全兼容。

因为你明确说明暂时不需要处理section(节)逻辑,而你现有读取方法返回的扁平化键值对本身就没有节前缀,直接按照key=value的逐行格式写入文件即可,和IniConfigurationProvider的解析规则完全匹配:

  • 每行第一个=作为键和值的分隔符,值中包含的=不会被误解析
  • 值为null或空时,直接写key=即可,读取时会对应拿到空值
  • 常规文本不需要额外转义,仅当值中包含换行等特殊字符时才需要补充转义逻辑,绝大多数简单INI场景不需要处理

实现代码

直接在你现有的ExtensionMethods静态类中添加以下方法即可:

using System.Text;

public static bool WriteIni(this ConfigurationBuilder _, string filename, ImmutableDictionary<string, string?> map)
{
    try
    {
        // 自动创建文件所在目录,避免路径不存在报错
        var fileDir = Path.GetDirectoryName(filename);
        if (!string.IsNullOrEmpty(fileDir) && !Directory.Exists(fileDir))
        {
            Directory.CreateDirectory(fileDir);
        }

        // 以UTF8编码全量覆盖写入文件,和.NET INI读取默认编码对齐
        using var writer = new StreamWriter(filename, false, Encoding.UTF8);
        foreach (var (key, value) in map)
        {
            // 跳过空键,避免写入无效行
            if (string.IsNullOrWhiteSpace(key)) continue;
            writer.WriteLine($"{key}={value}");
        }
        writer.Flush();
        return true;
    }
    catch
    {
        // 可按需补充异常日志逻辑,和你现有读取方法的错误处理风格对齐即可
        return false;
    }
}

补充说明

  • 该实现写入的INI文件可以直接被你之前编写的ParseIni方法正常读取,读写逻辑完全匹配
  • 如果后续需要支持section,只需要在写入前把键按:(.NET Configuration的默认层级分隔符)拆分,遇到新节名时先写入[节名]行,再写入对应节下的键值对即可
  • 该实现是全量覆盖写入逻辑,不会保留原有INI文件的注释、空行格式,如果需要做增量修改保留原有格式,需要额外实现INI结构解析逻辑,简单配置存储场景下当前实现完全够用

内容的提问来源于stack exchange,提问作者kofifus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:39:42