***************************************************
更多精彩,欢迎进入:http://shop115376623.taobao.com
***************************************************
 /*
 ========================================================================
 
 C# 对Ini文件操作(C# ini文件操作类)
 [IniFiles.cs]
 = =蝶晓梦整理了好久,拿出来分享
 注意,不要用相对路径,要用绝对路径,否则有几个函数会把文件建立到“C:\Windows”目录下
 如果找不到建立的文件,很可能建立到“C:\Windows”目录下了
 代码是蝶晓梦从网上收集的整理而成,改动并且增加了一些,感谢以前写这些代码的人
 使用方法:添加到工程文件的引用现有项里面,
 然后在想用的地方这样用:
 #region 读写配置文件
 string AppPath= Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)+@"\";
 string IniFile="MyIniFile.ini";           
 IniFiles Ini = new IniFiles(AppPath+IniFile);//ini文件的绝对路径
 Ini.WriteValue("RunTime Control", "Running", "mystring");
 
 #endregion
 蝶晓梦说这个类能干很多事情,
 比如增加一行注释
 Ini.AddNotes("This is a note");
 
 比如写入一个字符串的值
 Ini.WriteValue("RunTime Control", "Running", "mystring");
 
 比如写入一个整型的值
 Ini.WriteValue("RunTime Control", "Running", 0);
 
 比如写入一个布尔型的值
 Ini.WriteValue("RunTime Control", "Running", true);
 
 还能写入datetime的和object的
 读的时候能读字符串的,整型的,布尔的,datetime的,例如
 bool running=Ini.ReadValue("RunTime Control", "Running", true);
 其他功能自己可以增加或者发掘
 写了两个事件,一个是当向Ini.FileName赋值时会触发Ini文件改变的事件
 还有一个是这个类实例化的时候会触发一个
 举例子:
 Ini.IniFileChanged+=new IniFiles.EventHandler(Ini_IniFileChanged);//注册事件
 
 然后事件触发的内容写在这里
 void Ini_IniFileChanged(object sender, EventArgs e)
 {
 //写代码于此
 }
 蝶晓梦说,大家以后可以增加这个类的功能,使这个类更加强大
 增加内容:蝶晓梦说,平时不要首先用addnotes和addtext,可能会因为文本编码的问题出错
 ========================================================================
 */
 
 using System;
 using System.IO;
 using System.Text;
 using System.Runtime.InteropServices;
 
 public class IniFiles
 {
 public delegate void EventHandler(object sender, EventArgs e);
 
 
 public event EventHandler IniFileChanged;
 public event EventHandler Initialization;
 protected string IniFileName;
 
 public string FileName
 {
 get
 {
 return IniFileName;
 }
 set
 {
 if (value != IniFileName)
 {
 IniFileName = value;
 OnIniFileChanged(new EventArgs());
 }
 }
     }
 
 protected void OnIniFileChanged(EventArgs e)
 {
 if (IniFileChanged != null)
 IniFileChanged(null, e);
 }
 
 protected void OnInitialization(EventArgs e)
 {
 if (Initialization != null)
 Initialization(null, e);
 }
 
 [DllImport("kernel32")]
 private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
         /*
         section: 要写入的段落名
         key: 要写入的键,如果该key存在则覆盖写入
         val: key所对应的值
         filePath: INI文件的完整路径和文件名
         */
 [DllImport("kernel32")]
 private static extern int GetPrivateProfileString(string section, string key, string defVal, System.Text.StringBuilder retVal, int size, string filePath);
 /*
 section:要读取的段落名
 key: 要读取的键
 defVal: 读取异常的情况下的缺省值
 retVal: key所对应的值,如果该key不存在则返回空值
 size: 值允许的大小
 filePath: INI文件的完整路径和文件名
 
 */
 
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="INIPath">文件路径</param>
 public IniFiles(string FileName)
 {               
 IniFileName = FileName;        
 }
 /// <summary>
 /// 写入INI文件
 /// </summary>
 /// <param name="Section">项目名称(如 [TypeName] )</param>
 /// <param name="Key">键</param>
 /// <param name="Value">值</param>
 public void WriteValue(string Section, string Key, string Value)
 {
 WritePrivateProfileString(Section, Key, Value, this.IniFileName);
 }
 /// <summary>
 /// 读出INI文件
 /// </summary>
 /// <param name="Section">项目名称(如 [TypeName] )</param>
 /// <param name="Key">键</param>
 public string ReadValue(string Section, string Key ,string Default)
 {
 StringBuilder temp = new StringBuilder(500);
 int i = GetPrivateProfileString(Section, Key, Default, temp, 500, this.IniFileName);
 return temp.ToString();
 }
 /// <summary>
 /// 验证文件是否存在
 /// </summary>
 /// <returns>布尔值</returns>
 public bool ExistINIFile()
 {
 return File.Exists(IniFileName);        
 }
 /// <summary>
 /// 创建文件夹
 /// </summary>
 /// <param name="path">路径</param>
 private void NewDirectory(String path)
 {
 if (!Directory.Exists(path))
 {
 Directory.CreateDirectory(path);
 }
 }
 /// <summary>
 /// 添加一行注释
 /// </summary>
 /// <param name="Notes">注释</param>
 public void AddNotes(string Notes)
 {
 string filename = IniFileName;
 string path;
 path = Directory.GetParent(filename).ToString();
 NewDirectory(path);
 FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
 StreamWriter sw = new StreamWriter(fs);
 sw.BaseStream.Seek(0, SeekOrigin.End);
 sw.WriteLine(@";" + Notes);
 sw.Flush();
 sw.Close();
 fs.Close();
 sw.Dispose();
 fs.Dispose();
 }
 /// <summary>
 /// 添加一行文本
 /// </summary>
 /// <param name="Text">文本</param>
 public void AddText(string Text)
 {
 string filename = IniFileName;
 string path;
 path = Directory.GetParent(filename).ToString();
 NewDirectory(path);
 FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
 StreamWriter sw = new StreamWriter(fs);
 sw.BaseStream.Seek(0, SeekOrigin.End);
 sw.WriteLine(Text);
 sw.Flush();
 sw.Close();
 fs.Close();
 sw.Dispose();
 fs.Dispose();
 }
 
 #region 重载
 public void WriteValue(string Section, string Key, int Value)
 {
 WriteValue(Section, Key, Value.ToString());
 }
 public void WriteValue(string Section, string Key, Boolean Value)
 {
 WriteValue(Section, Key, Value.ToString());
 }
 public void WriteValue(string Section, string Key, DateTime Value)
 {
 WriteValue(Section, Key, Value.ToString());
 }
 public void WriteValue(string Section, string Key, object Value)
 {
 WriteValue(Section, Key, Value.ToString());
 }
 public int ReadValue(string Section, string Key, int Default)
 {
 return  Convert.ToInt32(ReadValue(Section, Key, Default.ToString()));
 }
 
 public bool ReadValue(string Section, string Key, bool Default)
 {
 return Convert.ToBoolean(ReadValue(Section, Key, Default.ToString()));
 }
 
 
 public DateTime ReadValue(string Section, string Key, DateTime Default)
 {
 return Convert.ToDateTime(ReadValue(Section, Key, Default.ToString()));
 }
 
 
 public string ReadValue(string Section, string Key)
 {
 return ReadValue(Section, Key, "");
 }
 #endregion
 }
 
 
 /*
 ========================================================================
 
 将上面的代码保存成IniFiles.cs
 然后添加到项目里
 更新到2009-08-28
 ========================================================================
 */