C#读写INI文件的最简方法

 更新时间:2025年01月09日 08:32:21   作者:小码编匠  
INI文件,全称为Initialization File(初始化文件),是一种传统的文本型配置文件格式,广泛应用于Windows操作系统及早期应用程序中,本文将聚焦于C#语言环境下,介绍如何以最简化的方式实现INI文件的读写操,需要的朋友可以参考下

一、引言

INI文件,全称为Initialization File(初始化文件),是一种传统的文本型配置文件格式,广泛应用于Windows操作系统及早期应用程序中,用于存储软件的各项设置和参数。

尽管开发中XML、JSON或更现代的配置格式如YAML等逐渐占据主流,但INI文件凭借其简洁明了的结构和易于人类阅读与编辑的特点,在特定场景下仍然具有不可替代的价值。

本文将聚焦于C#语言环境下,介绍如何以最简化的方式实现INI文件的读写操作。

二、INI文件基础

INI文件采用键值对(key-value pairs)的形式组织数据,并将其划分为若干个逻辑段落(sections)。其基本结构如下:

; 注释行(以分号开始)

[Section1]     ; 段落名,用方括号包围
key1 = value1   ; 键值对,等号分隔键与值
key2 = value2

[Section2]
keyA = valueA
keyB = valueB

其中:

注释:以分号(;)开头的行被视为注释,用于解释文件中的设置。

段落(Section):用方括号([])包裹的名称标识一个特定的配置区域,用于分类相关设置。

键(Key):在每个段落内定义的唯一标识符,用于表示特定的配置项。

值(Value):与键关联的数据,可以是字符串、数字或其他简单文本表示的信息。

三、C#读写INI文件的最简方法

在C#中,虽然.NET框架并未直接提供对INI文件的内置支持,但可以通过以下两种简便途径实现INI文件的读写:

1、使用Microsoft.VisualBasic命名空间提供的API

尽管名为Visual Basic,但此命名空间中的类库在C#中同样可用。

其中包含了对INI文件操作的便捷方法,无需额外引入外部库或编写复杂的P/Invoke代码。

以下是最简示例:

using Microsoft.VisualBasic.FileIO;

// 读取INI文件
public string ReadIniValue(string section, string key, string filePath)
{
    return IniParser.ReadKeyValue(filePath, section, key, "");
}

// 写入INI文件
public void WriteIniValue(string section, string key, string value, string filePath)
{
    IniParser.WriteKeyValue(filePath, section, key, value);
}

// 定义辅助类
internal static class IniParser
{
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
    [DllImport("kernel32")]
    private static extern int WritePrivateProfileString(string section, string key, string val, string filePath);

    internal static string ReadKeyValue(string iniPath, string section, string key, string defaultValue)
    {
        const int MAX_BUFFER = 65535;
        var sb = new StringBuilder(MAX_BUFFER);
        GetPrivateProfileString(section, key, defaultValue, sb, MAX_BUFFER, iniPath);
        return sb.ToString();
    }

    internal static void WriteKeyValue(string iniPath, string section, string key, string value)
    {
        WritePrivateProfileString(section, key, value, iniPath);
    }
}

2、利用第三方库

若希望避免直接调用Win32 API,或者寻求更丰富的功能和更好的错误处理,可以选用成熟的第三方库,如IniFileParserNini等。这些库提供了面向对象的接口,简化了INI文件的操作。以下是一个使用IniFileParser库的简例:

using IniParser;
using IniParser.Model;

// 读取INI文件
public string ReadIniValue(string section, string key, string filePath)
{
    var parser = new FileIniDataParser();
    IniData data = parser.ReadFile(filePath);
    return data[section][key];
}

// 写入INI文件
public void WriteIniValue(string section, string key, string value, string filePath)
{
    var parser = new FileIniDataParser();
    IniData data = parser.ReadFile(filePath);
    data[section][key] = value;
    parser.WriteFile(filePath, data);
}

四、结语

尽管INI文件并非现代应用程序首选的配置格式,但在特定需求下,尤其是对于轻量级、跨平台要求不高的项目,其简洁性仍使其成为一个可行的选择。

C#开发可通过使用Microsoft.VisualBasic命名空间提供的API或第三方库,以最简化的代码实现INI文件的读写操作。

这两种方法均能有效满足基本的INI文件处理需求,可根据项目的具体需求和偏好选择合适的方法。

最后

到此这篇关于C#读写INI文件的最简方法的文章就介绍到这了,更多相关C#读写INI文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用MySqlBulkLoader实现批量插入数据的示例详解

    利用MySqlBulkLoader实现批量插入数据的示例详解

    MySQLBulkLoader是MySQL Connector/Net类中的一个类,用于包装MySQL语句。本文将利用MySqlBulkLoader实现批量插入数据功能,感兴趣的可以了解一下
    2022-06-06
  • C#计算器编写代码

    C#计算器编写代码

    这篇文章主要为大家分享了C#计算器编写代码,供大家参考,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • C# Dictionary的使用实例代码

    C# Dictionary的使用实例代码

    C# Dictionary的使用实例代码,需要的朋友可以参考一下
    2013-04-04
  • C/C++ 传递动态内存的深入理解

    C/C++ 传递动态内存的深入理解

    本篇文章是对C/C++中的传递动态内存进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 一款域名监控小工具 Domain(IP)Watcher 实现代码

    一款域名监控小工具 Domain(IP)Watcher 实现代码

    域名是否正常,网站是否可以正常访问是很头痛的问题,怎样简单地监控域名是否可以正常访问呢,这里发布一款域名监控小工具:Domain(IP)Watcher
    2011-11-11
  • C#过滤sql特殊字符串的方法

    C#过滤sql特殊字符串的方法

    这篇文章介绍了C#过滤sql特殊字符串的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • c# 如何实现不同进程之间的通信

    c# 如何实现不同进程之间的通信

    这篇文章主要介绍了c# 如何实现不同进程之间的通信,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-11-11
  • c#中object、var和dynamic的区别小结

    c#中object、var和dynamic的区别小结

    这篇文章主要给大家介绍了关于c#中object、var和dynamic的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Unity 使用tiledmap解析地图的详细过程

    Unity 使用tiledmap解析地图的详细过程

    这篇文章主要介绍了Unity 使用tiledmap解析地图,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 在C#程序中注入恶意DLL的方法详解

    在C#程序中注入恶意DLL的方法详解

    为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的?其实简而言之就是线程的远程注入,这一篇就展开说一下
    2022-09-09

最新评论