工作中一直比较少用ini配置文件,就算用到也基本手撸代码来处理,最近在一个小项目中使用的是因时间紧急又一下找不到以前手撸的代码放哪了,就上网找了一下发现原来windows自带的kernel32库中就已打包ini配置文件的操作,简单易用。
比如我们手上有一个ini文件内容如下:
[zhangsan] country=china age=100 [peter] country=JPA age=50
我们对ini操作的工具类代码如下
public class iniUtil { private const int VALUE_MAX_LEN = 1024; /// <summary> /// 获取值 /// </summary> /// <param name="section">段落名</param> /// <param name="keyName">键名</param> /// <param name="defaultValue">读取异常是的缺省值</param> /// <param name="returnValue">键名所对应的的值,没有找到返回空值</param> /// <param name="size">返回值允许的大小</param> /// <param name="filepath">ini文件的完整路径</param> /// <returns></returns> [DllImport("kernel32.dll")] private static extern int GetPrivateProfileString( string section, string keyName, string defaultValue, StringBuilder returnValue, int size, string filepath); /// <summary> /// 写入 /// </summary> /// <param name="section">需要写入的段落名</param> /// <param name="key">需要写入的键名</param> /// <param name="val">写入值</param> /// <param name="filepath">ini文件的完整路径</param> /// <returns></returns> [DllImport("kernel32.dll")] private static extern int WritePrivateProfileString( string section, string key, string val, string filepath); /// <summary> /// 外部函数:读配置 /// </summary> /// <param name="filename">文件名</param> /// <param name="section">段落名</param> /// <param name="keyName">键名</param> /// <param name="defaultValue">默认值</param> /// <returns></returns> public static string ReadProfileValue(string filename, string section, string keyName, string defaultValue) { StringBuilder returnValue = new StringBuilder(VALUE_MAX_LEN + 1); GetPrivateProfileString(section, keyName, defaultValue, returnValue, VALUE_MAX_LEN, filename); return returnValue.ToString(); } /// <summary> /// 外部函数:写配置 /// </summary> /// <param name="filename">文件名</param> /// <param name="section">段落名</param> /// <param name="keyName">键名</param> /// <param name="defaultValue">默认值</param> /// <returns></returns> public static bool WriteProfileValue(string filename, string section, string keyName, string keyValue) { return (0 != WritePrivateProfileString(section, keyName, keyValue, filename)); } }
比如我们读上方实例ini文件中zhangsan段落的country内容代码如下:
iniUtil util = new iniUtil(); var country = util.ReadProfileValue(@"C:\Test\test.ini", //文件路径 "zhangsan", //对应ini文件的[zhangsan] "country", //对应[zhangsan]下的country "CHN"); //如果文件中没有该项的时候返回的默认值
我们现在写入一个叫 SysEnv 段落并配置IP和Port的内容代码如下:
iniUtil util = new iniUtil(); util.WriteProfileValue(@"C:\Test\test.ini", "SysEnv ", "IP", "127.0.0.1"); util.WriteProfileValue(@"C:\Test\test.ini", "SysEnv ", "Port", "10086");
这简单的工具类代码如下,使用的再根据自身情况把它做成Static方法或做成全局变量