[c#]:如何在C#中读写INI文件(一)

** [c#]: ** ** 如何在 ** ** C ** ** #中读写 ** ** INI ** ** 文件 **
作者:马金虎 本文选自:赛迪网 2002 年 09 月 24 日

INI 文件就是扩展名为 “ini” 的文件。在 Windows 系统中, INI 文件是很多,最重要的就是 “System.ini” 、 “System32.ini” 和 “Win.ini” 。该文件主要存放用户所做的选择以及系统的各种参数。用户可以通过修改 INI 文件,来改变应用程序和系统的很多配置。但自从 Windows 95 的退出,在 Windows 系统中引入了注册表的概念, INI 文件在 Windows 系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。但在某些场合, INI 文件还拥有其不可替代的地位。本文就来探讨一下 C #是如何对 INI 进行读写操作。

** INI ** ** 文件的结构 **

INI 文件是一种按照特点方式排列的文本文件。每一个 INI 文件构成都非常类似,由若干段落( section )组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词( keyword )和一个等号,等号右边的就是关键字对应的值( value )。其一般形式如下:

[Section1]

KeyWord1 = Valuel

KeyWord2 = Value2

……

[Section2]

KeyWord3 = Value3

KeyWord4 = Value4


本文中介绍的程序设计及运行环境:

● 微软视窗 2000 高级服务器版

● .Net Framework SDK 正式版

** C ** ** #和 Win32 API 函数 **

C #并不像 C ++,拥有属于自己的类库。 C #使用的类库是 .Net 框架为所有 .Net 程序开发提供的一个共有的类库 ——.Net FrameWork SDK 。虽然 .Net FrameWork SDK 内容十分庞大,功能也非常强大,但还不能面面俱到,至少它并没有提供直接操作 INI 文件所需要的相关的类。在本文中, 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 的输出实现的。下面代码就是在 C #利用命名空间 “System.Runtime.InteropServices” 中的 “DllImport” 特征类申明上面二个 Win32 的 API 函数:

** C ** ** #申明 INI 文件的写操作函数 WritePrivateProfileString (): **

[ DllImport ( "kernel32" ) ]

private static extern long WritePrivateProfileString ( string

section ,

string key , string val , string filePath ) ;


参数说明: section : INI 文件中的段落; key : INI 文件中的关键字; val : INI 文件中关键字的数值; filePath : INI 文件的完整的路径和名称。

** C ** ** #申明 INI 文件的读操作函数 GetPrivateProfileString (): **

[ DllImport ( "kernel32" ) ]

private static extern int GetPrivateProfileString ( string section ,

string key , string def , StringBuilder retVal ,

int size , string filePath ) ;


参数说明: section : INI 文件中的段落名称; key : INI 文件中的关键字; def :无法读取时候时候的缺省数值; retVal :读取数值; size :数值的大小; filePath : INI 文件的完整路径和名称。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus