通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。
但C#本身并不具备读写INI文件的API,只有通过调用非托管代码的方式,即系统自身的API才能达到所需的目的。
对应读写的方法分别为GetPrivateProfileString和WritePrivateProfileString。
GetPrivateProfileString中的各参数:
lpAppName —— section的名称
lpKeyName —— key的名称
lpDefault —— 如果lpKeyName没有被找到的话,则将这个值复制到lpReturnedString中
lpReturnedString —— 用于返回结果的值
nSize —— lpReturnedString的字符长度
lpFileName —— INI文件名WritePrivateProfileString中的各参数:
lpAppName —— section的名称
lpKeyName —— key的名称
lpString —— 与lpKeyName对应的值
lpFileName —— INI文件名
实际代码如下所示:
using System;using System.Runtime.InteropServices;using System.Text;
namespace INIDemo{class Program{static void Main(string[] args){WritePrivateProfileString("Demo", "abc", "123", "c:\\demo.ini");
StringBuilder temp = new StringBuilder();GetPrivateProfileString("Demo", "abc", "", temp, 255, "c:\\demo.ini");Console.WriteLine(temp);
Console.ReadLine();}
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]private static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString,int nSize, string lpFileName);}}程序运行后INI文件中的内容为:复制代码代码如下:
[Demo]
abc=123
这是一种相对简单的方法,若是不想使用非托管方法,你也可以通过另一种比较麻烦的途径解决这个问题。
实现代码二、public class Ini{// 声明INI文件的写操作函数 WritePrivateProfileString()[System.Runtime.InteropServices.DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);// 声明INI文件的读操作函数 GetPrivateProfileString()[System.Runtime.InteropServices.DllImport("kernel32")]private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);private string sPath = null;
public Ini(string path){this.sPath = path;}
public void Writue(string section, string key, string value){// section=配置节,key=键名,value=键值,path=路径WritePrivateProfileString(section, key, value, sPath);
}public string ReadValue(string section, string key){// 每次从ini中读取多少字节System.Text.StringBuilder temp = new System.Text.StringBuilder(255);// section=配置节,key=键名,temp=上面,path=路径GetPrivateProfileString(section, key, "", temp, 255, sPath);return temp.ToString();}}由于INI文件的格式是固定的,所以只要编写相应的解析程序就可以完成同样的读写功能,就是通常的字符串处理而已。
如果你不愿亲自动手的话,不要紧,已经有现成的程序——Cinchoo framework,可以为你实现你想作的事情。
然后一切又变得简单了。
您可能感兴趣的文章:C# 读写ini文件操作实现C# 读写编辑INI文件的操作C#实现读写ini配置文件的方法详解详解C#如何实现读写ini文件C#实现ini文件读写操作C#中读写INI配置文件的方法C#读写INI文件的方法c#读写ini配置文件示例C#读写INI文件的多种方法与性能优化指南
