INI文件的结构:
INI文件是一种按照特点方式排列的文本文件。每一个INI文件构成都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等号右边的就是关键字对应的值(value)。其一般形式如下:
[Section1]
KeyWord1 =Valuel
KeyWord2 =Value2
……
[Section2]
KeyWord3 =Value3
KeyWord4 =Value4
C#操作INI文件使用的是Windows系统自带Win32的API函数——WritePrivateProfileString()和GetPrivateProfileString()函数。这二个函数都位于“kernel32.dll”文件中。
我们知道在C#中使用的类库都是托管代码(Managed Code)文件,而Win32的API函数所处的文件,都是非托管代码(Unmanaged Code)文件。这就导致了在C#中不可能直接使用这些非托管代码文件中的函数。好在.Net框架为了保持对下的兼容,也为了充分利用以前的资源,提出了互操作,通过互操作可以实现对Win32的API函数的调用。互操作不仅适用于Win32的API函数,还可以用来访问托管的COM对象。C#中对Win32的API函数的互操作是通过命名空间“System.Runtime.InteropServices”中的“DllImport”特征类来实现的。它的主要作用是指示此属性化方法是作为非托管DLL的输出实现的。
第一步:
声明命名空间:System.Runtime.InteropServices;
第二步:
在类中声明INI文件的写操作函数WritePrivateProfileString():
[ DllImport ( "kernel32" ) ]
private static extern long WritePrivateProfileString ( string section , string key , string val , string filePath ) ;section:节名称;
key:键名称;
val:键值;
filepath:保存路径;
kernel32.dll为包含读写函数的文件;
DllImport:特征类
在类中声明
INI文件的读操作函数GetPrivateProfileString():
[ DllImport ( "kernel32" ) ]
privatestaticexternint GetPrivateProfileString (string section ,string key ,string def , StringBuilder retVal ,int size , stringfilePath ) ;
section:INI文件中的段落名称;
key:INI文件中的关键字;
def:无法读取时候时候的缺省数值;
retVal:读取数值;
size:数值的大小;
filePath:INI文件的完整路径和名称。
(注意不要有拼写错误……)
第三步:
像调用方法一样直接调用即可:
写调用:WritePrivateProfileString("Demo", "abc", "123", "d:\\demo.ini"); //@"d:\demo.ini"这种写法不能用?为什么?
读调用:GetPrivateProfileString("Demo", "abc", "", temp, 255, "d:\\demo.ini");