一.INI文件介紹

ini 文件是文本文件,中间的数据格式一般为:
[Section1 Name]
KeyName1=value1
KeyName2=value2
...

[Section2 Name]
KeyName1=value1
KeyName2=value2

ini 文件可以分为几个 Section,每个 Section 的名称用 [] 括起来,在一个 Section 中,可以有很多的 Key,每一个 Key 可以有一个值并占用一行,格式是 Key=value

二.讀寫INI文件需要調用的兩個API函數

[DllImport("kernel32")]
        private static extern Boolean WritePrivateProfileString(string section, string key,
                    string val, string filePath);

[DllImport("kernel32")]
        private static extern Boolean GetPrivateProfileString(string section, string key, string def,
                    StringBuilder retVal, int size, string filePath);

三.一個INI文件樣本

[sky]
sex=MAN
old=12
[sky2]
sex=WOMAN
old=15
[sky3]
old=99

四.讀寫INI文件實例(C#)

(1)前臺頁面(.aspx)

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>未命名頁面</title>
</head>
<body>
<form id="form1" runat="server" method="post">
  
        <input id="select" type="file" runat="server" />
        &nbsp; &nbsp;&nbsp;
        <asp:Button ID="btn" runat="server" Text="讀取" OnClick="btn_Click" />
     &nbsp; &nbsp;
     <asp:Button ID="btnWirte" runat="server" Text="寫入" OnClick="btnWirte_Click" /><br/>
        <textarea id="atxt" rows="10" cols="30" runat="server" ></textarea>
    </form>
</body>
</html>

(2)後臺頁面(.ASPX.CS)

#region Using
using System;
using System.Text;
using rwini;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
#endregion

public partial class _Default : System.Web.UI.Page
{
    #region Page_Load
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    #endregion

    #region Button事件
    /// <summary>
    /// 讀取按鈕事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btn_Click(object sender, EventArgs e)
    {    
       this.atxt.InnerText = this.GetItemValue(this.GetFileName);       
    }

    /// <summary>
    /// 寫入按鈕事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnWirte_Click(object sender, EventArgs e)
    {
        this.atxt.InnerText = this.SetItemValue(this.GetFileName);
    }
    #endregion

    #region 自定義函數
    /// <summary>
    /// 用於讀取文件名
    /// </summary>
    private string GetFileName
    {
        get
        {
            return this.select.PostedFile.FileName;
        }
    }

    /// <summary>
    /// 讀取文件的方法
    /// </summary>
    /// <param name="strFileName">文件名</param>
    /// <returns>讀取的數值</returns>
    private string GetItemValue(string strFileName)
    {
        try
        {
            string strvalue = "";
            crwini inidoc = new crwini(strFileName);
            //確保讀取的不是空值
            if (inidoc.IniReadValue("sky", "sex") != "")
            {
                strvalue = inidoc.IniReadValue("sky", "sex");
            }
            return strvalue+"讀取成功";
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }
      
    }
    /// <summary>
    /// 寫入文件的方法
    /// </summary>
    /// <param name="strFileName">文件名</param>
    /// <returns>寫入的數值</returns>
    private string SetItemValue(string strFileName)
    {
        try
        {
            string strvalue = "99";
            crwini inidoc = new crwini(strFileName);
            inidoc.IniWriteValue("sky3", "old", strvalue);
            return strvalue+"寫入成功";
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }
    }
    #endregion
}

(3)調用的類文件(NameSpace)

#region Using
using System;
using System.Collections;
using System.Text;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;
#endregion

namespace rwini
{
    public class crwini
    {
        //聲明全局變量記錄文件名
      public string strPath = "";   

      #region   类的构造函数
        /// <summary>
        /// 传递INI文件名
        /// </summary>
        /// <param name="INIPath">文件名</param>
        public crwini(string INIPath)
        {
          strPath = INIPath;
        }
       #endregion

      #region   声明读写INI文件的API函数

        [DllImport("kernel32")]
        private static extern Boolean WritePrivateProfileString(string section, string key,
                    string val, string filePath);

        [DllImport("kernel32")]
        private static extern Boolean GetPrivateProfileString(string section, string key, string def,
                    StringBuilder retVal, int size, string filePath);
       #endregion

      #region 自定義函數

        /// <summary>
        /// 寫INI文件
        /// </summary>
        /// <param name="Section"></param>
        /// <param name="Key"></param>
        /// <param name="Value"></param>
        public string IniWriteValue(string Section, string Key, string Value)
        {
            try
            {
                WritePrivateProfileString(Section, Key, Value, this.strPath);
                return "True";
            }
            catch (Exception e)
            {
                return e.ToString();
            }       
        }         

         /// <summary>
         /// 讀INI文件
         /// </summary>
         /// <param name="Section"></param>
         /// <param name="Key"></param>
         /// <returns></returns>
        public string IniReadValue(string Section, string Key)
        {
            try
            {
                StringBuilder strSbr = new StringBuilder();
                Boolean strReturn = GetPrivateProfileString(Section, Key, "無資料", strSbr, 255, this.strPath);
                //讀取成功
                if (strReturn.Equals(true))
                {
                    return strSbr.ToString();
                }
                else
                {
                    return "讀取失敗!";
                }        
            }
            catch (Exception e)
            {
                return e.ToString();
            }

        }
        #endregion
    }

}