C#读写INI文件
C#读写INI文件 
摘自:伊图教程网[www.etoow.com]
http://www.etoow.com/html/2007-08/1187271505-1.html
虽然微软早已经建议在WINDOWS中用注册表代替INI文件,但是在实际应用中,INI文件仍然有用武之地,尤其现在绿色软件的流行,越来越多的程序将自己的一些配置信息保存到了INI文件中。![]() using System;
using System;
![]() using System.IO;
using System.IO;
![]() using System.Runtime.InteropServices;
using System.Runtime.InteropServices;
![]() using System.Text;
using System.Text;
![]() using System.Collections;
using System.Collections;
![]() using System.Collections.Specialized;
using System.Collections.Specialized;
![]()
![]() namespace wuyisky{
namespace wuyisky{
![]() /**/
  /**/
![]() /// <summary>
  /// <summary>
![]() /// IniFiles的类
  /// IniFiles的类
![]() /// </summary>
  /// </summary>
![]() public class IniFiles
  public class IniFiles
![]() {
  {
![]() public string FileName; //INI文件名
    public string FileName; //INI文件名
![]() //声明读写INI文件的API函数
    //声明读写INI文件的API函数
![]() [DllImport("kernel32")]
    [DllImport("kernel32")]
![]() private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
    private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
![]() [DllImport("kernel32")]
    [DllImport("kernel32")]
![]() private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);
    private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);
![]() //类的构造函数,传递INI文件名
    //类的构造函数,传递INI文件名
![]() public IniFiles(string AFileName)
    public IniFiles(string AFileName)
![]() {
    {
![]() // 判断文件是否存在
      // 判断文件是否存在
![]() FileInfo fileInfo = new FileInfo(AFileName);
      FileInfo fileInfo = new FileInfo(AFileName);
![]() //Todo:搞清枚举的用法
      //Todo:搞清枚举的用法
![]() if ((!fileInfo.Exists))
      if ((!fileInfo.Exists))
![]() { //|| (FileAttributes.Directory in fileInfo.Attributes))
      { //|| (FileAttributes.Directory in fileInfo.Attributes))
![]() //文件不存在,建立文件
        //文件不存在,建立文件
![]() System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);
        System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);
![]() try
        try
![]() {
        {
![]() sw.Write("#表格配置档案");
          sw.Write("#表格配置档案");
![]() sw.Close();
          sw.Close();
![]() }
        }
![]()
![]() catch
        catch
![]() {
        {
![]() throw (new ApplicationException("Ini文件不存在"));
          throw (new ApplicationException("Ini文件不存在"));
![]() }
        }
![]() }
      }
![]() //必须是完全路径,不能是相对路径
      //必须是完全路径,不能是相对路径
![]() FileName = fileInfo.FullName;
      FileName = fileInfo.FullName;
![]() }
    }
![]() //写INI文件
    //写INI文件
![]() public void WriteString(string Section, string Ident, string Value)
    public void WriteString(string Section, string Ident, string Value)
![]() {
    {
![]() if (!WritePrivateProfileString(Section, Ident, Value, FileName))
      if (!WritePrivateProfileString(Section, Ident, Value, FileName))
![]() {
      {
![]() 
 
![]() throw (new ApplicationException("写Ini文件出错"));
        throw (new ApplicationException("写Ini文件出错"));
![]() }
      }
![]() }
    }
![]() //读取INI文件指定
    //读取INI文件指定
![]() public string ReadString(string Section, string Ident, string Default)
    public string ReadString(string Section, string Ident, string Default)
![]() {
    {
![]() Byte[] Buffer = new Byte[65535];
      Byte[] Buffer = new Byte[65535];
![]() int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);
      int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);
![]() //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文
      //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文
![]() string s = Encoding.GetEncoding(0).GetString(Buffer);
      string s = Encoding.GetEncoding(0).GetString(Buffer);
![]() s = s.Substring(0, bufLen);
      s = s.Substring(0, bufLen);
![]() return s.Trim();
      return s.Trim();
![]() }
    }
![]()
![]() //读整数
    //读整数
![]() public int ReadInteger(string Section, string Ident, int Default)
    public int ReadInteger(string Section, string Ident, int Default)
![]() {
    {
![]() string intStr = ReadString(Section, Ident, Convert.ToString(Default));
      string intStr = ReadString(Section, Ident, Convert.ToString(Default));
![]() try
      try
![]() {
      {
![]() return Convert.ToInt32(intStr);
        return Convert.ToInt32(intStr);
![]()
![]() }
      }
![]() catch (Exception ex)
      catch (Exception ex)
![]() {
      {
![]() Console.WriteLine(ex.Message);
        Console.WriteLine(ex.Message);
![]() return Default;
        return Default;
![]() }
      }
![]() }
    }
![]()
![]() //写整数
    //写整数
![]() public void WriteInteger(string Section, string Ident, int Value)
    public void WriteInteger(string Section, string Ident, int Value)
![]() {
    {
![]() WriteString(Section, Ident, Value.ToString());
      WriteString(Section, Ident, Value.ToString());
![]() }
    }
![]()
![]() //读布尔
    //读布尔
![]() public bool ReadBool(string Section, string Ident, bool Default)
    public bool ReadBool(string Section, string Ident, bool Default)
![]() {
    {
![]() try
      try
![]() {
      {
![]() return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));
        return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));
![]() }
      }
![]() catch (Exception ex)
      catch (Exception ex)
![]() {
      {
![]() Console.WriteLine(ex.Message);
        Console.WriteLine(ex.Message);
![]() return Default;
        return Default;
![]() }
      }
![]() }
    }
![]()
![]() //写Bool
    //写Bool
![]() public void WriteBool(string Section, string Ident, bool Value)
    public void WriteBool(string Section, string Ident, bool Value)
![]() {
    {
![]() WriteString(Section, Ident, Convert.ToString(Value));
      WriteString(Section, Ident, Convert.ToString(Value));
![]() }
    }
![]()
![]() //从Ini文件中,将指定的Section名称中的所有Ident添加到列表中
    //从Ini文件中,将指定的Section名称中的所有Ident添加到列表中
![]() public void ReadSection(string Section, StringCollection Idents)
    public void ReadSection(string Section, StringCollection Idents)
![]() {
    {
![]() Byte[] Buffer = new Byte[16384];
      Byte[] Buffer = new Byte[16384];
![]() //Idents.Clear();
      //Idents.Clear();
![]()
![]() int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),
      int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),
![]() FileName);
       FileName);
![]() //对Section进行解析
      //对Section进行解析
![]() GetStringsFromBuffer(Buffer, bufLen, Idents);
      GetStringsFromBuffer(Buffer, bufLen, Idents);
![]() }
    }
![]()
![]() private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)
    private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)
![]() {
    {
![]() Strings.Clear();
      Strings.Clear();
![]() if (bufLen != 0)
      if (bufLen != 0)
![]() {
      {
![]() int start = 0;
        int start = 0;
![]() for (int i = 0; i < bufLen; i++)
        for (int i = 0; i < bufLen; i++)
![]() {
        {
![]() if ((Buffer[i] == 0) && ((i - start) > 0))
          if ((Buffer[i] == 0) && ((i - start) > 0))
![]() {
          {
![]() String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start);
            String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start);
![]() Strings.Add(s);
            Strings.Add(s);
![]() start = i + 1;
            start = i + 1;
![]() }
          }
![]() }
        }
![]() }
      }
![]() }
    }
![]() //从Ini文件中,读取所有的Sections的名称
    //从Ini文件中,读取所有的Sections的名称
![]() public void ReadSections(StringCollection SectionList)
    public void ReadSections(StringCollection SectionList)
![]() {
    {
![]() //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section
      //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section
![]() byte[] Buffer = new byte[65535];
      byte[] Buffer = new byte[65535];
![]() int bufLen = 0;
      int bufLen = 0;
![]() bufLen = GetPrivateProfileString(null, null, null, Buffer,
      bufLen = GetPrivateProfileString(null, null, null, Buffer,
![]() Buffer.GetUpperBound(0), FileName);
       Buffer.GetUpperBound(0), FileName);
![]() GetStringsFromBuffer(Buffer, bufLen, SectionList);
      GetStringsFromBuffer(Buffer, bufLen, SectionList);
![]() }
    }
![]() //读取指定的Section的所有Value到列表中
    //读取指定的Section的所有Value到列表中
![]() public void ReadSectionValues(string Section, NameValueCollection Values)
    public void ReadSectionValues(string Section, NameValueCollection Values)
![]() {
    {
![]() StringCollection KeyList = new StringCollection();
      StringCollection KeyList = new StringCollection();
![]() ReadSection(Section, KeyList);
      ReadSection(Section, KeyList);
![]() Values.Clear();
      Values.Clear();
![]() foreach (string key in KeyList)
      foreach (string key in KeyList)
![]() {
      {
![]() Values.Add(key, ReadString(Section, key, ""));
        Values.Add(key, ReadString(Section, key, ""));
![]() 
  
![]() }
      }
![]() }
    }
![]() ////读取指定的Section的所有Value到列表中,
    ////读取指定的Section的所有Value到列表中,
![]() //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString)
    //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString)
![]() //{  string sectionValue;
    //{  string sectionValue;
![]() //  string[] sectionValueSplit;
    //  string[] sectionValueSplit;
![]() //  StringCollection KeyList = new StringCollection();
    //  StringCollection KeyList = new StringCollection();
![]() //  ReadSection(Section, KeyList);
    //  ReadSection(Section, KeyList);
![]() //  Values.Clear();
    //  Values.Clear();
![]() //  foreach (string key in KeyList)
    //  foreach (string key in KeyList)
![]() //  {
    //  {
![]() //    sectionValue=ReadString(Section, key, "");
    //    sectionValue=ReadString(Section, key, "");
![]() //    sectionValueSplit=sectionValue.Split(splitString);
    //    sectionValueSplit=sectionValue.Split(splitString);
![]() //    Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString());
    //    Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString());
![]() 
 
![]() //  }
    //  }
![]() //}
    //}
![]() //清除某个Section
    //清除某个Section
![]() public void EraseSection(string Section)
    public void EraseSection(string Section)
![]() {
    {
![]() //
      //
![]() if (!WritePrivateProfileString(Section, null, null, FileName))
      if (!WritePrivateProfileString(Section, null, null, FileName))
![]() {
      {
![]()
![]() throw (new ApplicationException("无法清除Ini文件中的Section"));
        throw (new ApplicationException("无法清除Ini文件中的Section"));
![]() }
      }
![]() }
    }
![]() //删除某个Section下的键
    //删除某个Section下的键
![]() public void DeleteKey(string Section, string Ident)
    public void DeleteKey(string Section, string Ident)
![]() {
    {
![]() WritePrivateProfileString(Section, Ident, null, FileName);
      WritePrivateProfileString(Section, Ident, null, FileName);
![]() }
    }
![]() //Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件
    //Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件
![]() //在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile
    //在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile
![]() //执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。
    //执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。
![]() public void UpdateFile()
    public void UpdateFile()
![]() {
    {
![]() WritePrivateProfileString(null, null, null, FileName);
      WritePrivateProfileString(null, null, null, FileName);
![]() }
    }
![]()
![]() //检查某个Section下的某个键值是否存在
    //检查某个Section下的某个键值是否存在
![]() public bool ValueExists(string Section, string Ident)
    public bool ValueExists(string Section, string Ident)
![]() {
    {
![]() //
      //
![]() StringCollection Idents = new StringCollection();
      StringCollection Idents = new StringCollection();
![]() ReadSection(Section, Idents);
      ReadSection(Section, Idents);
![]() return Idents.IndexOf(Ident) > -1;
      return Idents.IndexOf(Ident) > -1;
![]() }
    }
![]()
![]() //确保资源的释放
    //确保资源的释放
![]() ~IniFiles()
    ~IniFiles()
![]() {
    {
![]() UpdateFile();
      UpdateFile();
![]() }
    }
![]() }
  }
![]() }
}
![]() 
目前C# 对ini文件操作基本上要被xml文件取代了,但是我觉得ini文件的读写仍然是编程的基本,是必须会的
摘自:伊图教程网[www.etoow.com]
http://www.etoow.com/html/2007-08/1187271505-1.html
虽然微软早已经建议在WINDOWS中用注册表代替INI文件,但是在实际应用中,INI文件仍然有用武之地,尤其现在绿色软件的流行,越来越多的程序将自己的一些配置信息保存到了INI文件中。
INI文件是文本文件,由若干节(section)组成,在每个带括号的标题下面,是若干个关键词(key)及其对应的值(Value)
[Section]
Key=Value
       VC中提供了API函数进行INI文件的读写操作,但是微软推出的C#编程语言中却没有相应的方法,下面是一个C# ini文件读写类,从网上收集的,很全,就是没有对section的改名功能,高手可以增加一个。
 using System;
using System; using System.IO;
using System.IO; using System.Runtime.InteropServices;
using System.Runtime.InteropServices; using System.Text;
using System.Text; using System.Collections;
using System.Collections; using System.Collections.Specialized;
using System.Collections.Specialized;
 namespace wuyisky{
namespace wuyisky{ /**/
  /**/ /// <summary>
  /// <summary> /// IniFiles的类
  /// IniFiles的类 /// </summary>
  /// </summary> public class IniFiles
  public class IniFiles {
  { public string FileName; //INI文件名
    public string FileName; //INI文件名 //声明读写INI文件的API函数
    //声明读写INI文件的API函数 [DllImport("kernel32")]
    [DllImport("kernel32")] private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
    private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")]
    [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);
    private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath); //类的构造函数,传递INI文件名
    //类的构造函数,传递INI文件名 public IniFiles(string AFileName)
    public IniFiles(string AFileName) {
    { // 判断文件是否存在
      // 判断文件是否存在 FileInfo fileInfo = new FileInfo(AFileName);
      FileInfo fileInfo = new FileInfo(AFileName); //Todo:搞清枚举的用法
      //Todo:搞清枚举的用法 if ((!fileInfo.Exists))
      if ((!fileInfo.Exists)) { //|| (FileAttributes.Directory in fileInfo.Attributes))
      { //|| (FileAttributes.Directory in fileInfo.Attributes)) //文件不存在,建立文件
        //文件不存在,建立文件 System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);
        System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default); try
        try {
        { sw.Write("#表格配置档案");
          sw.Write("#表格配置档案"); sw.Close();
          sw.Close(); }
        }
 catch
        catch {
        { throw (new ApplicationException("Ini文件不存在"));
          throw (new ApplicationException("Ini文件不存在")); }
        } }
      } //必须是完全路径,不能是相对路径
      //必须是完全路径,不能是相对路径 FileName = fileInfo.FullName;
      FileName = fileInfo.FullName; }
    } //写INI文件
    //写INI文件 public void WriteString(string Section, string Ident, string Value)
    public void WriteString(string Section, string Ident, string Value) {
    { if (!WritePrivateProfileString(Section, Ident, Value, FileName))
      if (!WritePrivateProfileString(Section, Ident, Value, FileName)) {
      { 
  throw (new ApplicationException("写Ini文件出错"));
        throw (new ApplicationException("写Ini文件出错")); }
      } }
    } //读取INI文件指定
    //读取INI文件指定 public string ReadString(string Section, string Ident, string Default)
    public string ReadString(string Section, string Ident, string Default) {
    { Byte[] Buffer = new Byte[65535];
      Byte[] Buffer = new Byte[65535]; int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);
      int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName); //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文
      //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文 string s = Encoding.GetEncoding(0).GetString(Buffer);
      string s = Encoding.GetEncoding(0).GetString(Buffer); s = s.Substring(0, bufLen);
      s = s.Substring(0, bufLen); return s.Trim();
      return s.Trim(); }
    }
 //读整数
    //读整数 public int ReadInteger(string Section, string Ident, int Default)
    public int ReadInteger(string Section, string Ident, int Default) {
    { string intStr = ReadString(Section, Ident, Convert.ToString(Default));
      string intStr = ReadString(Section, Ident, Convert.ToString(Default)); try
      try {
      { return Convert.ToInt32(intStr);
        return Convert.ToInt32(intStr);
 }
      } catch (Exception ex)
      catch (Exception ex) {
      { Console.WriteLine(ex.Message);
        Console.WriteLine(ex.Message); return Default;
        return Default; }
      } }
    }
 //写整数
    //写整数 public void WriteInteger(string Section, string Ident, int Value)
    public void WriteInteger(string Section, string Ident, int Value) {
    { WriteString(Section, Ident, Value.ToString());
      WriteString(Section, Ident, Value.ToString()); }
    }
 //读布尔
    //读布尔 public bool ReadBool(string Section, string Ident, bool Default)
    public bool ReadBool(string Section, string Ident, bool Default) {
    { try
      try {
      { return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));
        return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default))); }
      } catch (Exception ex)
      catch (Exception ex) {
      { Console.WriteLine(ex.Message);
        Console.WriteLine(ex.Message); return Default;
        return Default; }
      } }
    }
 //写Bool
    //写Bool public void WriteBool(string Section, string Ident, bool Value)
    public void WriteBool(string Section, string Ident, bool Value) {
    { WriteString(Section, Ident, Convert.ToString(Value));
      WriteString(Section, Ident, Convert.ToString(Value)); }
    }
 //从Ini文件中,将指定的Section名称中的所有Ident添加到列表中
    //从Ini文件中,将指定的Section名称中的所有Ident添加到列表中 public void ReadSection(string Section, StringCollection Idents)
    public void ReadSection(string Section, StringCollection Idents) {
    { Byte[] Buffer = new Byte[16384];
      Byte[] Buffer = new Byte[16384]; //Idents.Clear();
      //Idents.Clear();
 int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),
      int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0), FileName);
       FileName); //对Section进行解析
      //对Section进行解析 GetStringsFromBuffer(Buffer, bufLen, Idents);
      GetStringsFromBuffer(Buffer, bufLen, Idents); }
    }
 private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)
    private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings) {
    { Strings.Clear();
      Strings.Clear(); if (bufLen != 0)
      if (bufLen != 0) {
      { int start = 0;
        int start = 0; for (int i = 0; i < bufLen; i++)
        for (int i = 0; i < bufLen; i++) {
        { if ((Buffer[i] == 0) && ((i - start) > 0))
          if ((Buffer[i] == 0) && ((i - start) > 0)) {
          { String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start);
            String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start); Strings.Add(s);
            Strings.Add(s); start = i + 1;
            start = i + 1; }
          } }
        } }
      } }
    } //从Ini文件中,读取所有的Sections的名称
    //从Ini文件中,读取所有的Sections的名称 public void ReadSections(StringCollection SectionList)
    public void ReadSections(StringCollection SectionList) {
    { //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section
      //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section byte[] Buffer = new byte[65535];
      byte[] Buffer = new byte[65535]; int bufLen = 0;
      int bufLen = 0; bufLen = GetPrivateProfileString(null, null, null, Buffer,
      bufLen = GetPrivateProfileString(null, null, null, Buffer, Buffer.GetUpperBound(0), FileName);
       Buffer.GetUpperBound(0), FileName); GetStringsFromBuffer(Buffer, bufLen, SectionList);
      GetStringsFromBuffer(Buffer, bufLen, SectionList); }
    } //读取指定的Section的所有Value到列表中
    //读取指定的Section的所有Value到列表中 public void ReadSectionValues(string Section, NameValueCollection Values)
    public void ReadSectionValues(string Section, NameValueCollection Values) {
    { StringCollection KeyList = new StringCollection();
      StringCollection KeyList = new StringCollection(); ReadSection(Section, KeyList);
      ReadSection(Section, KeyList); Values.Clear();
      Values.Clear(); foreach (string key in KeyList)
      foreach (string key in KeyList) {
      { Values.Add(key, ReadString(Section, key, ""));
        Values.Add(key, ReadString(Section, key, "")); 
   }
      } }
    } ////读取指定的Section的所有Value到列表中,
    ////读取指定的Section的所有Value到列表中, //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString)
    //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString) //{  string sectionValue;
    //{  string sectionValue; //  string[] sectionValueSplit;
    //  string[] sectionValueSplit; //  StringCollection KeyList = new StringCollection();
    //  StringCollection KeyList = new StringCollection(); //  ReadSection(Section, KeyList);
    //  ReadSection(Section, KeyList); //  Values.Clear();
    //  Values.Clear(); //  foreach (string key in KeyList)
    //  foreach (string key in KeyList) //  {
    //  { //    sectionValue=ReadString(Section, key, "");
    //    sectionValue=ReadString(Section, key, ""); //    sectionValueSplit=sectionValue.Split(splitString);
    //    sectionValueSplit=sectionValue.Split(splitString); //    Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString());
    //    Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString()); 
  //  }
    //  } //}
    //} //清除某个Section
    //清除某个Section public void EraseSection(string Section)
    public void EraseSection(string Section) {
    { //
      // if (!WritePrivateProfileString(Section, null, null, FileName))
      if (!WritePrivateProfileString(Section, null, null, FileName)) {
      {
 throw (new ApplicationException("无法清除Ini文件中的Section"));
        throw (new ApplicationException("无法清除Ini文件中的Section")); }
      } }
    } //删除某个Section下的键
    //删除某个Section下的键 public void DeleteKey(string Section, string Ident)
    public void DeleteKey(string Section, string Ident) {
    { WritePrivateProfileString(Section, Ident, null, FileName);
      WritePrivateProfileString(Section, Ident, null, FileName); }
    } //Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件
    //Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件 //在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile
    //在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile //执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。
    //执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。 public void UpdateFile()
    public void UpdateFile() {
    { WritePrivateProfileString(null, null, null, FileName);
      WritePrivateProfileString(null, null, null, FileName); }
    }
 //检查某个Section下的某个键值是否存在
    //检查某个Section下的某个键值是否存在 public bool ValueExists(string Section, string Ident)
    public bool ValueExists(string Section, string Ident) {
    { //
      // StringCollection Idents = new StringCollection();
      StringCollection Idents = new StringCollection(); ReadSection(Section, Idents);
      ReadSection(Section, Idents); return Idents.IndexOf(Ident) > -1;
      return Idents.IndexOf(Ident) > -1; }
    }
 //确保资源的释放
    //确保资源的释放 ~IniFiles()
    ~IniFiles() {
    { UpdateFile();
      UpdateFile(); }
    } }
  } }
}
目前C# 对ini文件操作基本上要被xml文件取代了,但是我觉得ini文件的读写仍然是编程的基本,是必须会的
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号