Bootstrap

C# INI配置文件的读写

一、INI文件

initialization file的缩写,即初始化文件,通常存放的是一个程序的初始化信息,是Windows的系统配置文件所采用的存储格式,统管windows的各项配置。ini文件的后缀名不一定是.ini,也可以是.cfg、.conf、或者是.tx*。

二、ini文件格式

ini文件由若干个 节(section)组成,每个section由若干 键(key)组成,每个 key 可以赋相应的值。读写ini文件实际上就是读写某个 section 中相应的 key 的值,而这只要借助几个函数即可完成。

三、语法规范

参数(Parameter):最基本元素,包含参数名(name)和参数值(value),

节(section):所有的参数以节为单位结合在一起。

注释(comments):用分号;表示,放在注释

之前,;号后直到行尾均为注释。示例如下: 

[section]
name=value
age=18
;student info

四、C#解析INI文件

c#通过调用系统api接口进行简单读写ini配置文件,从ini文件中获取文件目录,拉起QQ:

用到的ini配置文件内容如下:

 调用系统API接口进行读写:

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

namespace StartApp
{
    internal class IniConfigHelper
    {
        private const int VALUE_MAX_LEN = 1024; //值最大长度

        /// <summary>
        /// 写配置到ini文件
        /// </summary>
        /// <param name="appName">节点名</param>
        /// <param name="keyName">要写入的key</param>
        /// <param name="value">要写入的值</param>
        /// <param name="fileName">要写入ini配置文件路径</param>
        /// <returns>成功返回非0,失败返回0</returns>
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string appName, string keyName,
            string value, string fileName);

        /// <summary>
        /// 从ini配置文件读配置
        /// </summary>
        /// <param name="appName">节点名</param>
        /// <param name="keyName">目标key</param>
        /// <param name="defaultValue">如果找不到目标key就返回这个默认值</param>
        /// <param name="returnedString">返回目标key对应的值</param>
        /// <param name="size">returnedString的大小</param>
        /// <param name="fileName">要读取的ini配置文件路径</param>
        /// <returns>返回返回字符串的长度</returns>

        [DllImport("kernel32")]
        private static extern long GetPrivateProfileString(string appName, string keyName,
            string defaultValue, StringBuilder returnedString, int size, string fileName);

        /// <summary>
        /// 外部接口,写配置
        /// </summary>
        /// <param name="iniFilePath">ini配置文件路径</param>
        /// <param name="appName">节点名</param>
        /// <param name="keyName">key</param>
        /// <param name="value">值</param>
        /// <returns>成功返回true,失败返回false</returns>
        public static bool WriteSetting(string iniFilePath, string appName, string keyName, string value)
        {
            return (0 == WritePrivateProfileString(appName, keyName, value, iniFilePath) ? false : true);
        }

        /// <summary>
        /// 读配置
        /// </summary>
        /// <param name="iniFilePath">ini配置文件路径</param>
        /// <param name="appName">节点名</param>
        /// <param name="keyName">目标key</param>
        /// <param name="defaultValue">默认值</param>
        /// <returns>返回key对应的value</returns>
        public static string ReadSetting(string iniFilePath, string appName, string keyName, string defaultValue)
        {
            StringBuilder result = new StringBuilder(VALUE_MAX_LEN + 1);
            GetPrivateProfileString(appName, keyName, defaultValue, result, VALUE_MAX_LEN, iniFilePath);
            return result.ToString();
        }
    }
}

在程序中调用读写方法:

//配置文件路径
            string iniFilePath = Directory.GetCurrentDirectory() + "\\app.ini";
 
            //没有app.ini时读配置,读到的时默认值"miss"
            string AppPath = IniConfigHelper.ReadSetting(iniFilePath, "Apppath", "Path", "miss");
            //写配置
 			AppPath = IniConfigHelper.ReadSetting(iniFilePath, "Default", "Path", "miss");
            IniConfigHelper.WriteSetting(iniFilePath, "Apppath", "Path", AppPath);
            //再次读配置
            AppPath = IniConfigHelper.ReadSetting(iniFilePath, "Apppath", "Path", "miss");

实现效果如下:

;