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");
实现效果如下: