在dotnet中操作INI文件

using System;
using System.IO;
using System.Collections;

namespace Sinoprise.Configuration
{
 /// <summary>
 /// IniFile 的读取和设置
 /// 作者:尹曙光
 /// www.sinoprise.com
 /// </summary>
 public class IniFile
 {
  
  #region 外部导入函数 
  
  //对ini文件进行写操作的函数
  //[DllImport("kernel32",CharSet = CharSet.Auto)]
  //protected static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
  
  //对ini文件进行读操作的函数
  //[DllImport("kernel32",CharSet = CharSet.Auto)]
  //protected static extern int GetPrivateProfileString(string section,string key,string def, StringBuilder retVal,int size,string filePath);
  
  #endregion

  private string m_fileName;  //用于存放ini文件的路径和名称
  private Hashtable m_sections; //用于存放整个ini文件的内容

  public string FileName
  {
   get
   {
    return m_fileName;
   }
  }
       
  /// <summary>
  /// IniFile的构造函数
  /// </summary>
  /// <param name="fileName">ini文件的路径和名称</param>
  public IniFile(string fileName)
  {
   m_fileName = fileName; 
   m_sections = new Hashtable();
   LoadValues();   
  }
  
  ~IniFile()
  {
   m_sections = null;
  }

  
  /// <summary>
  /// 装载Ini文件的内容
  /// </summary>
  private void LoadValues()
  {
   if ((m_fileName.Trim()!="") && (File.Exists(m_fileName)))
   {
    
    using (StreamReader sr = new StreamReader(m_fileName))
    {
     SetStrings(sr); 
    }
    
   }
  }

  
  /// <summary>
  /// 添加一个ini文件的Section
  /// </summary>
  /// <param name="item">section的名字</param>
  /// <returns>添加的section</returns>
  private Hashtable AddSection(string item)
  {
   Hashtable sectionsItem = new Hashtable();
   m_sections.Add(item,sectionsItem);
   return sectionsItem;
  }
  

  /// <summary>
  /// 将ini文件的内容读取到内存当中
  /// </summary>
  /// <param name="sr">读取文件的流</param>
  private void SetStrings(StreamReader sr)
  {
   String line;
   Hashtable sectionsKeys = null;
   int splitPos;
   string keyName,keyValue;
   while ((line = sr.ReadLine()) != null)
   {
    line = line.Trim();
    
    if (line == "") continue;
   
    if  (line.Substring(0,1)!=";")
    {
     if ((line.Substring(0,1)=="[") && (line.Substring(line.Length-1,1)=="]"))
     {
      line = line.Substring(1,line.Length -2);
      sectionsKeys = AddSection(line.Trim());
     }
    
     else
     {
      
      splitPos = line.IndexOf('='); 
      if ((splitPos>0) && (sectionsKeys != null))
      {
       keyName =line.Substring(0,splitPos).Trim();

       if (keyName.Length == 0)
       {
        throw new Exception("IniFile Syntax Error!");
       }

       if (keyName.Length < line.Length - 1)
       {
        keyValue =line.Substring(splitPos+1,line.Length-2-splitPos) ;
       }
       else
       {
        keyValue = "";
       }
       sectionsKeys.Add(keyName,keyValue);
      }
      
     }
    }
     
   }
  }


  /// <summary>
  /// 将内容写回到Ini文件当中
  /// </summary>
  public void UpdateFile()
  {
   Hashtable sectionsItem;

   if (File.Exists(m_fileName))
   {
    File.Delete(m_fileName);
   }
   
   using (StreamWriter sw = new StreamWriter(m_fileName))
   {
    
    foreach(DictionaryEntry scnItem in m_sections)
    {
     sw.WriteLine("["+(string)scnItem.Key+"]");

     sectionsItem=(Hashtable)m_sections[(string)scnItem.Key];
     foreach(DictionaryEntry keyItem in sectionsItem)
     {
      sw.WriteLine((string)keyItem.Key+"="+(string)keyItem.Value);
     }
     
     sw.WriteLine("");
    }

    sw.Close();
   }

  }


  /// <summary>
  /// 读取Ini文件所有的section
  /// </summary>
  /// <returns>以ArrayList形式返回以字符串表示的section</returns>
  public ArrayList ReadSections()
  {
   ArrayList sectionList = new ArrayList();

   foreach(DictionaryEntry item in m_sections)
   {
    sectionList.Add((string)item.Key);
   }
   return sectionList;
  }


  /// <summary>
  /// 读取Ini文件的一个section中的所有key
  /// </summary>
  /// <param name="sectionName">要读取的section</param>
  /// <returns>以ArrayList形式返回以字符串表示的kry</returns>
  public ArrayList ReadKeys(string sectionName)
  {
   ArrayList keyList = new ArrayList();

   Hashtable sectionsItem =(Hashtable)m_sections[sectionName.Trim()];

   foreach(DictionaryEntry item in sectionsItem)
   {
    keyList.Add((string)item.Key);
   }
   
   return keyList;
  }


  /// <summary>
  /// 判断一个section是否存在
  /// </summary>
  /// <param name="sectionName">要检查的section的名字</param>
  /// <returns>如果section存在,则返回true,否则返回false</returns>
  public bool SectionExists(string sectionName)
  {
   return m_sections.ContainsKey(sectionName.Trim());
  }  
  

  /// <summary>
  /// 判断一个key在一个section中是否存在
  /// </summary>
  /// <param name="sectionName">所指定的section</param>
  /// <param name="keyName">所要检查的key的名字</param>
  /// <returns>如果此key在这个section中存在,则返回true,否则返回false</returns>
  public bool KeyExists(string sectionName,string keyName)
  {   
   sectionName = sectionName.Trim();

   if (!m_sections.ContainsKey(sectionName))
   {
    return false;
   }
   
   return ((Hashtable)m_sections[sectionName]).ContainsKey(keyName.Trim());   
  }

  /// <summary>
  /// 删除一个section
  /// </summary>
  /// <param name="sectionName">所要删除的section的名字</param>
  public void EraseSection(string sectionName)
  {
   m_sections.Remove(sectionName);
  }
  
  
  /// <summary>
  ///在一个sectionk中删除一个key
  /// </summary>
  /// <param name="sectionName">所指定的section</param>
  /// <param name="keyName">所要删除的key的名字</param>
  public void DeleteKey(string sectionName,string keyName )
  {
   sectionName = sectionName.Trim();

   if (!m_sections.ContainsKey(sectionName))
   {
    return;
   }
   
   ((Hashtable)m_sections[sectionName]).Remove(keyName.Trim());   
  }  


  public string ReadString(string sectionName,string keyName,string defaultValue)
  {
   sectionName = sectionName.Trim();
   keyName = keyName.Trim();

   if (!m_sections.ContainsKey(sectionName))
   {
    return defaultValue;
   }
   
   Hashtable sectionsItem = (Hashtable)m_sections[sectionName];
   if (!sectionsItem.ContainsKey(keyName))
   {
    return defaultValue;
   }

   return (string)sectionsItem[keyName];

  }

  public void WriteString(string sectionName,string keyName,string stringValue)
  {
   Hashtable sectionsItem;

   sectionName = sectionName.Trim();
   keyName = keyName.Trim();
   stringValue = stringValue.Trim();


   if (!m_sections.ContainsKey(sectionName))
   {
    sectionsItem = AddSection(sectionName);
   }
   else
   {
    sectionsItem = (Hashtable)m_sections[sectionName];
   }
   
   
   if (!sectionsItem.ContainsKey(keyName))
   {
    sectionsItem[keyName] = stringValue;
   }
   else
   {
    sectionsItem.Add(keyName,stringValue);
   }
  }


  
  public long ReadInteger(string sectionName,string keyName,long defaultValue)
  {
   return Convert.ToInt64(ReadString(sectionName,keyName,Convert.ToString(defaultValue)));
  }
  
  public void WriteInteger(string sectionName,string keyName,long longValue)
  {
   WriteString(sectionName,keyName,Convert.ToString(longValue));
  }
  
  
  
  public bool ReadBool(string sectionName,string keyName,bool defaultValue)
  {
   return Convert.ToBoolean(ReadString(sectionName,keyName,Convert.ToString(defaultValue)));
  }
  
  public void WriteBool(string sectionName,string keyName,bool boolValue)
  {
   WriteString(sectionName,keyName,Convert.ToString(boolValue));
  }
  
  
  public int ReadBinaryStream(string sectionName,string keyName,Stream defaultValue)
  {
   return 0;
  }
  public void WriteBinaryStream(string sectionName,string keyName,Stream streamValue)
  {}


  
  public DateTime ReadDate(string sectionName,string keyName,DateTime defaultValue)
  {
   return Convert.ToDateTime(ReadString(sectionName,keyName,Convert.ToString(defaultValue))).Date;
  }
  public void  WriteDate(string sectionName,string keyName,DateTime dateValue)
  {
   WriteString(sectionName,keyName,Convert.ToString(dateValue.Date));
  }


  
  public DateTime ReadDateTime(string sectionName,string keyName,DateTime defaultValue)
  {
   return Convert.ToDateTime(ReadString(sectionName,keyName,Convert.ToString(defaultValue)));
  }
  public void  WriteDateTime(string sectionName,string keyName,DateTime dateTimeValue)
  {
   WriteString(sectionName,keyName,Convert.ToString(dateTimeValue));
  }

                  
  public double ReadFloat(string sectionName,string keyName,double defaultValue)
  {
   return Convert.ToDouble(ReadString(sectionName,keyName,Convert.ToString(defaultValue)));
  }
  public void  WriteFloat(string sectionName,string keyName,double doubleValue)
  {
   WriteString(sectionName,keyName,Convert.ToString(doubleValue));
  }


  public DateTime ReadTime(string sectionName,string keyName,DateTime defaultValue)
  {
   return Convert.ToDateTime(ReadString(sectionName,keyName,Convert.ToString(defaultValue)));
  }  
  public void  WriteTime(string sectionName,string keyName,DateTime timeValue)
  {
   WriteString(sectionName,keyName,Convert.ToString(timeValue.TimeOfDay));
  } 
  
  
 }
}


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值