一.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" />
<asp:Button ID="btn" runat="server" Text="讀取" OnClick="btn_Click" />
<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
}
}