手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

如何在C#中读写INI文档

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
INI文档就是扩展名为“ini”的文档。在Windows系统中,INI文档是很多,最重要的就是“System.ini”、“System32.ini”和“Win.ini”。该文档主要存放用户所做的选择连同系统的各种参数。用户能够通过修改INI文档,来改变应用程式和系统的很多配置。但自从Windows95的退出,在Windows系统中引入了注册表的概念,INI文档在Windows系统的地位就开始不断下滑,这是因为注册表的独特长处,使应用程式和系统都把许多参数和初始化信息放进了注册表中。但在某些场合,INI文档还拥有其不可替代的地位。本文就来探讨一下C#是如何对INI进行读写操作。

INI文档的结构

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

  [Section1]

  KeyWord1=Valuel

  KeyWord2=Value2

  ……

  [Section2]

  KeyWord3=Value3

   KeyWord4=Value4


  C#和Win32API函数

  C#并不像C++,拥有属于自己的类库。C#使用的类库是.Net框架为任何.Net程式研发提供的一个共有的类库——.NetFrameWorkSDK。虽然.NetFrameWorkSDK内容十分庞大,功能也很强大,但还不能面面俱到,至少他并没有提供直接操作INI文档所需要的相关的类。在本文中,C#操作INI文档使用的是Windows系统自带Win32的API函数——WritePrivateProfileString()和GetPrivateProfileString()函数。这二个函数都位于“kernel32.dll”文档中。

  我们知道在C#中使用的类库都是托管代码(ManagedCode)文档,而Win32的API函数所处的文档,都是非托管代码(UnmanagedCode)文档。这就导致了在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")]

  privatestaticexternlongWritePrivateProfileString(string

  section,

  stringkey,stringval,stringfilePath);


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

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

  [DllImport("kernel32")]

  privatestaticexternintGetPrivateProfileString(stringsection,

  stringkey,stringdef,StringBuilderretVal,

intsize,stringfilePath);


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

  下面是个读写INI文档的类

  public class INIClass

   {

   public string inipath;

   [DllImport("kernel32")]

   private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);

   [DllImport("kernel32")]

   private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);

   /// <summary>

   /// 构造方法

   /// </summary>

   /// <param name="INIPath">文档路径</param>

   public INIClass(string INIPath)

   {

inipath = INIPath;

   }

   /// <summary>

   /// 写入INI文档

   /// </summary>

   /// <param name="Section">项目名称(如 [TypeName] )</param>

   /// <param name="Key">键</param>

   /// <param name="Value">值</param>

   public void IniWriteValue(string Section,string Key,string Value)

   {

WritePrivateProfileString(Section,Key,Value,this.inipath);

   }

   /// <summary>

   /// 读出INI文档

   /// </summary>

   /// <param name="Section">项目名称(如 [TypeName] )</param>

   /// <param name="Key">键</param>

   public string IniReadValue(string Section,string Key)

   {

  StringBuilder temp = new StringBuilder(500);

  int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath);

return temp.ToString();

   }

   /// <summary>

   /// 验证文档是否存在

   /// </summary>

   /// <returns>布尔值</returns>

   public bool ExistINIFile()

   {

  return File.Exists(inipath);

   }

   }




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS