C# 读写ini文件操作实现

 更新时间:2025年01月21日 11:47:50   作者:Love朴啾啾  
本文主要介绍了C# 读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的设置和参数。

一、INI文件结构

INI文件结构简单,由节(Sections)和键值对(Key-Value Pairs)组成。每个节由方括号包围,例如[SectionName],而键值对则是以等号=分隔的字符串,例如Key=Value。每个节都包含一个或多个键值对,用于存储相关的配置信息。

INI文件示例:

[AmplifierForm] 
ResInitialize=0.5,0.7,0.5,0.6,0.6

[OffSignalForm] 
ResInitialize=0.5,0.7,0.5,0.6,0.6
ResColl=1.3,1.5

该示例中有两个节:AmplifierForm、OffSignalForm,每个节下都有一些键值对,用于存储配置信息。

二、读取INI文件中的数据

C#命名空间中没有直接读写INI的类,但在"kernel32.dll"文件中有Win32的API函数–WritePrivateProfileString()和GetPrivateProfileString(),可操作ini文件。

静态操作使用类

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace FileOperationsDemo
{
    public class ReadWriteINI
    {
        #region API函数声明

        /// <summary>
        /// 写入ini文件
        /// </summary>
        /// <param name="section">节点名称</param>
        /// <param name="key">键</param>
        /// <param name="val">值</param>
        /// <param name="filePath">ini路径</param>
        /// <returns>0失败/其他成功</returns>
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="section">节点名称,[]内的段落名</param>
        /// <param name="key">键</param>
        /// <param name="def">值(未读取到数据时设置的默认返回值)</param>
        /// 对应API函数的def参数,它的值由用户指定,是当在配置文件中没有找到具体的Value时,就用def的值来代替。可以为空
        /// <param name="retVal">读取到的结果值</param>
        /// <param name="size">读取缓冲区大小</param>
        /// <param name="filePath">ini配置文件的路径加ini文件名</param>
        /// <returns>读取到的字节数量</returns>
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
        #endregion

        /// <summary>
        /// 写INI,添加新节点、键值,及编辑修改键对应的值
        /// </summary>
        /// <param name="in_filename">ini配置文件的路径加ini文件名</param>
        /// <param name="Section">节点名称,[]内的段落名</param>
        /// <param name="Key">键</param>
        /// <param name="Value">值</param>
        public static bool IniFile_SetVal(string in_filename, string Section, string Key, string Value)
        {
            if (File.Exists(in_filename))
            {
                // 调用winapi函数将Key=Value写入Section节点下
                long len = WritePrivateProfileString(Section, Key, Value, in_filename);
                if (len == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            else
            {
                return true;
            }
        }
        /// <summary>
        /// 读ini
        /// </summary>
        /// <param name="in_filename">ini配置文件的路径加ini文件名</param>
        /// <param name="Section">节点名称,[]内的段落名</param>
        /// <param name="Key">键</param>
        /// <returns></returns>
        public static string IniFile_GetVal(string in_filename, string Section, string Key)
        {
            if (File.Exists(in_filename))
            {
                // 声明接收的数据
                StringBuilder builder = new StringBuilder(1024);
                // 调用winapi函数读取Section节点下Key的值
                int len = GetPrivateProfileString(Section, Key, "", builder, 1024, in_filename);
                if (len == 0)
                    return "1";
                else
                    return (builder.ToString());
            }
            else
                return string.Empty;
        }
    }
}

操作示例

        /// <summary>
        /// 读取ini文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            string pathName = Application.StartupPath + "\\config\\ResOriginal.ini";
            string resStarter = ReadWriteINI.IniFile_GetVal(pathName, "SelfCheckFace", "ResInitialize");
            string[] resInitLine = resStarter.Split(',');
            for (int ii = 0; ii < resInitLine.Length; ii++)
            {
                richTextBox2.AppendText(resInitLine[ii] + "\n");
            }
        }
        /// <summary>
        /// 写入ini文件,新建或编辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            string pathName = Application.StartupPath + "\\config\\ResOriginal.ini";
            ReadWriteINI.IniFile_SetVal(pathName, "SelfCheckFace", "ResInitialize", "1,2,3,4,5");
            
            string[] resInitLine = richTextBox2.Lines;
            string tempWrite = string.Join(",", resInitLine);
            tempWrite=tempWrite.Remove(tempWrite.Length-1);
            ReadWriteINI.IniFile_SetVal(pathName, "SelfCheckF", "ResInitialize", tempWrite);
        }

在这里插入图片描述

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

相关文章

  • C#使用SemaphoreSlim实现并发控制与限流策略的实战指南

    C#使用SemaphoreSlim实现并发控制与限流策略的实战指南

    在现代应用中(如爬虫、并发请求、数据库连接池、异步任务处理),我们常常需要限制同时执行的任务数量,以避免过载或资源竞争,在 C# 中,最简洁高效的解决方案之一就是SemaphoreSlim,本文就给大家介绍了C#使用SemaphoreSlim实现并发控制与限流策略的实战指南
    2025-11-11
  • c# rsa注册实现加密文字

    c# rsa注册实现加密文字

    这篇文章主要介绍了c# rsa注册实现加密文字,需要的朋友可以参考下
    2014-04-04
  • C#实现简单获取扫码枪信息代码

    C#实现简单获取扫码枪信息代码

    本文给大家分享的是使用C#实现简单获取扫码枪信息代码,非常的简单实用,有需要的小伙伴可以参考下。
    2016-07-07
  • ASP.NET Core 中的Main方法详解

    ASP.NET Core 中的Main方法详解

    在本篇文章里小编给大家整理的是关于ASP.NET Core 中的Main方法以及相关知识点总结,需要的朋友们参考下。
    2019-09-09
  • C#实现语音播报功能

    C#实现语音播报功能

    这篇文章主要为大家详细介绍了C#实现语音播报功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C#通过ADO.NET访问数据的方法详解

    C#通过ADO.NET访问数据的方法详解

    在 C# 的应用开发中,数据访问是极为关键的部分,ADO.NET作为.NET 框架下用于数据访问的核心技术,能够帮助开发者便捷地与各类数据源进行交互,本文将深入剖析ADO.NET,带你掌握使用 C# 通过ADO.NET访问数据的方法,需要的朋友可以参考下
    2025-02-02
  • 深入理解C#中的享元模式(Flyweight Pattern)

    深入理解C#中的享元模式(Flyweight Pattern)

    享元模式通过共享对象减少内存占用,区分内蕴与外部状态,适用于大量重复对象场景,下面就来详细的介绍一下,感兴趣的可以了解一下
    2025-05-05
  • C#通过IComparable实现ListT.sort()排序

    C#通过IComparable实现ListT.sort()排序

    这篇文章主要介绍了C#通过IComparable实现ListT.sort()排序的方法,可实现自定义的排序方法,是非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • C#使用Directoryinfo类获得目录信息和属性的方法

    C#使用Directoryinfo类获得目录信息和属性的方法

    这篇文章主要介绍了C#使用Directoryinfo类获得目录信息和属性的方法,涉及C#操作目录的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C# 中的GroupBy的动态拼接问题及GroupBy<>用法介绍

    C# 中的GroupBy的动态拼接问题及GroupBy<>用法介绍

    这篇文章主要介绍了C# 中的GroupBy的动态拼接问题,在文章给大家提到了C# List泛型集合中的GroupBy<>用法详解,需要的朋友可以参考下
    2017-12-12

最新评论