C#里面怎样读取ini文件
ini文件也是一种配置文件,在早期的windows桌面系统中主要是用ini文件作为系统的配置文件,从win95以后开始转向使用注册表,但是还有很多系统配置是使用ini文件的。其实INI文件就是简单的text文件,只不过这种txt文件要遵循一定的INI文件格式。“.ini ”就是英文 “initialization”的头三个字母的缩写;当然ini file的后缀名也不一定是".ini"也可以是".cfg",".conf ”或者是".txt"。
INI文件由节、键、值组成。
节
[section]
参数(键=值)
name=value
注解
注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。
NI文件的格式很简单,最基本的三个要素是:parameters,sections和comments。
什么是parameters?
INI所包含的最基本的“元素”就是parameter;每一个parameter都有一个name和一个value,name和value是由等号“=”隔开。name在等号的左边。
如:
name = value
什么是sections ?
所有的parameters都是以sections为单位结合在一起的。所有的section名称都是独占一行,并且sections名字都被方括号包围着([ and ])。在section声明后的所有parameters都是属于该section。对于一个section没有明显的结束标志符,一个section的开始就是上一个section的结束,或者是end of the file。Sections一般情况下不能被nested,当然特殊情况下也可以实现sections的嵌套。
section如下所示:
[section]
什么是comments ?
在INI文件中注释语句是以分号“;”开始的。所有的所有的注释语句不管多长都是独占一行直到结束的。在分号和行结束符之间的所有内容都是被忽略的。
注释实例如下:
;comments text
了解了ini文件,接下来就是怎样在代码里面读取文件内容的事情了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace TestReadIni
{
class Program
{
static void Main(string[] args)
{
String sPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
sPath = sPath.Substring(0, sPath.LastIndexOf("\\"));
string filename = sPath + "\\" + "SMALLERP.ini";
string strServer = GetIniFileString("DataBase", "Server", "",filename);
string strUserID = GetIniFileString("DataBase", "User", "",filename);
string strPwd = GetIniFileString("DataBase", "Password", "",filename);
WriteFile("DataBase", "Password","1",filename);
Console.WriteLine("Server = " + strServer);
Console.WriteLine("user = " + strUserID);
Console.WriteLine("Password = " + strPwd);
}
[DllImport("kernel32")]
public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal,int size, string filePath);
[DllImport("kernel32")]
public static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
public static string GetIniFileString(string section, string key, string def, string filePath)
{
StringBuilder temp = new StringBuilder(1024);
GetPrivateProfileString(section, key, def, temp, 1024, filePath);
return temp.ToString();
}
public static void WriteFile(string section, string key, string value, string filePath)
{
WritePrivateProfileString(section,key,value,filePath);
}
}
}