原文地址:http://developer.51cto.com/art/200908/143715.htm

C#读写ini文件之前要了解的概念:INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打开,主要存放的是用户所做的选择或系统的各种参数.

C#读写ini文件其实并不是普通的文本文件.它有自己的结构.由若干段落(SECTION)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键字(KEYWORD)和一个等号,等号右边就是关键字的值(VALUE).例如:

  1. [Section1]  
  2.     KeyWord1 = Value1  
  3.     KeyWord2 = Value2  
  4.     ...  
  5. [Section2]  
  6.     KeyWord3 = Value3  
  7.     KeyWord4 = Value4 

C#读写ini文件最初的想法:C#命名空间中没有直接读写INI的类,当然如果你把INT当成文本文件用System.IO类来读写算我没说.

我现在介绍的是系统处理INI的方法.

虽然C#中没有,但是在"kernel32.dll"这个文件中有Win32的API函数--WritePrivateProfileString()和GetPrivateProfileString()

C#读写ini文件实现之C#声明INI文件的写操作函数WritePrivateProfileString():

  1. [DllImport( "kernel32" )]  
  2.   private static extern long WritePrivateProfileString (
  3.  string section ,string key , string val   
  4. string filePath ) ; 

参数说明:

section:INI文件中的段落;

key:INI文件中的关键字;

val:INI文件中关键字的数值;

filePath:INI文件的完整的路径和名称。

C#读写ini文件实现之C#申明INI文件的读操作函数GetPrivateProfileString():

  1. [DllImport("kernel32")]  
  2.  private static extern int GetPrivateProfileString (
  3.  string section ,  
  4.   string key , string def , StringBuilder retVal ,  
  5.   int size , string filePath ) ; 

参数说明:

section:INI文件中的段落名称;

key:INI文件中的关键字;

def:无法读取时候时候的缺省数值;

retVal:读取数值;

size:数值的大小;

filePath:INI文件的完整路径和名称。

下面是一个C#读写ini文件的类:

  1. public class INIClass  
  2. {  
  3.  public string inipath;  
  4.  [DllImport("kernel32")]  
  5.  private static extern long WritePrivateProfileString(
  6. string section,string key,string val,string filePath);  
  7.  [DllImport("kernel32")]  
  8.  private static extern int GetPrivateProfileString(
  9. string section,string key,
  10. string def,StringBuilder retVal,
  11. int size,string filePath);  
  12.  /// ﹤summary﹥  
  13.  /// 构造方法  
  14.  /// ﹤/summary﹥  
  15.  /// ﹤param name="INIPath"﹥文件路径﹤/param﹥  
  16.  public INIClass(string INIPath)  
  17.  {  
  18.   inipath = INIPath;  
  19.  }  
  20.  /// ﹤summary﹥  
  21.  /// 写入INI文件  
  22.  /// ﹤/summary﹥  
  23.  /// ﹤param name="Section"﹥项目名称(如 [TypeName] )﹤/param﹥  
  24.  /// ﹤param name="Key"﹥键﹤/param﹥  
  25.  /// ﹤param name="Value"﹥值﹤/param﹥  
  26.  public void IniWriteValue(string Section,string Key,string Value)  
  27.  {  
  28.   WritePrivateProfileString(Section,Key,Value,this.inipath);  
  29.  }  
  30.  /// ﹤summary﹥  
  31.  /// 读出INI文件  
  32.  /// ﹤/summary﹥  
  33.  /// ﹤param name="Section"﹥项目名称(如 [TypeName] )﹤/param﹥  
  34.  /// ﹤param name="Key"﹥键﹤/param﹥  
  35.  public string IniReadValue(string Section,string Key)  
  36.  {  
  37.   StringBuilder temp = new StringBuilder(500);  
  38.   int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath);  
  39.   return temp.ToString();  
  40.  }  
  41.  /// ﹤summary﹥  
  42.  /// 验证文件是否存在  
  43.  /// ﹤/summary﹥  
  44.  /// ﹤returns﹥布尔值﹤/returns﹥  
  45.  public bool ExistINIFile()  
  46.  {  
  47.   return File.Exists(inipath);  
  48.  }  
posted on 2011-11-29 16:07  swarb  阅读(252)  评论(0编辑  收藏  举报