怎样用C#读取INI文件?
如果何实现?

解决方案 »

  1.   


    using System;
    using System.IO;
    using System.Text.RegularExpressions;namespace Yzf.Utility
    {
     /// <summary>
     /// IniFile reader
     /// </summary>
     public class IniFile
     {
      private string fileContents = null;  /// <summary>
      /// Constructor, given an INI file name, read the content
      /// </summary>
      /// <param name="fileName"></param>
      public IniFile(string fileName)
      {
       if(File.Exists(fileName))
       {
        StreamReader r = File.OpenText(fileName);
        fileContents = r.ReadToEnd();
        r.Close();
       }
      }  /// <summary>
      /// Get section names in an array, Read only
      /// </summary>
      public string[] SectionNames
      {
       get
       {
        // Using regular expression to get all section names.
        string regexPattern = @"\[(?<SectionName>\w*(\w|\s)*)\]";    Regex r = new Regex(regexPattern);  // Match "[anywords]"
        MatchCollection matches = r.Matches(fileContents);    // Writing all section names to a string array.
        string[] results = new string[matches.Count];    for(int i = 0; i < matches.Count; i++)
        {
         results[i] = matches[i].Result("${SectionName}");
        }
        return results;
       }
      }  /// <summary>
      /// Get the whole string in one section
      /// </summary>
      /// <param name="sectionName"></param>
      /// <returns></returns>
      public string GetSectionString(string sectionName)
      {
       string regexPattern = @"(\[" + sectionName + @"\]" 
        + @"(?<SectionString>.*)\[)";   Regex r = new Regex(regexPattern, RegexOptions.Singleline);
       if(r.IsMatch(fileContents))
       {
        return r.Match(fileContents).Result("${SectionString}");
       }   return string.Empty;
      }  /// <summary>
      /// Get the string value of certain key in certain section
      /// </summary>
      /// <param name="sectionName"></param>
      /// <param name="keyName"></param>
      /// <returns></returns>
      public string GetKeyString(string sectionName, string keyName)
      {
       string sectionString = this.GetSectionString(sectionName);
       string regexPattern = @"(" + keyName + @"=(?<value>.*)\r\n)";   Regex r = new Regex(regexPattern);
       if(r.IsMatch(fileContents))
       {
        return r.Match(fileContents).Result("${value}");
       }   return string.Empty;
      } }
    }
      

  2.   

    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">项目名称(如 [DataTP] )</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">项目名称(如 [DataTP] )</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);
    }
    }