ini檔案的簡單呼叫,相比xml更容易使用
首先,對於xml,我相信大家並不陌生吧,xml主要是做什麼的,如何去呼叫,一般學過xml的人都知道,這裡我就不復述了,為什麼我會反覆提xml呢?原因是ini檔案與xml有著異曲同工之妙,他也是用來儲存資料,提取資料用的,和xml類似,對於用過ini檔案的人來說,我相信大家更願意用ini檔案來實現資料的提取,比xml確實方便多了,ini最根本的還是利用了微軟的API來實現一系列操作的。在這裡,我就把我封裝好的ini檔案的增刪查改程式碼先貼上:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace iniFile { public static class iniClass { [DllImport("kernel32")] private static extern long WritePrivateProfileString(string lpApplicationName, string lpKeyName, string lpString, string lpFileName); [DllImport("kernel32")] private static extern long GetPrivateProfileString(string lpApplicationName, string lpKeyName, string lpDefault, System.Text.StringBuilder lpReturnedString, int nSize, string lpFileName);
[DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string defVal, Byte[] retVal, int size, string filePath); /// <summary> /// 指定某個條目名,獲取其Value值 /// </summary> /// <param name="section">小節名稱</param> /// <param name="key">設定的條目名</param> /// <param name="path">ini檔案地址</param> /// <returns></returns> public static string getKeyValue(string section, string key,string path) { StringBuilder sb=new StringBuilder(1024); GetPrivateProfileString(section, key, string.Empty, sb, 1024, path); return sb.ToString().Trim(); } /// <summary> /// 向ini檔案新增Key值,或將已存在的Key的Value值覆蓋 /// </summary> /// <param name="section">小節名稱</param> /// <param name="key">設定的條目名</param> /// <param name="value">條目的值</param> /// <param name="path">ini檔案地址</param> /// <returns></returns> public static long WriteKeyValue(string section, string key,string value,string path) { return WritePrivateProfileString(section, key,value,path); } /// <summary> /// 刪除指定小節的鍵值 /// </summary> /// <param name="section"></param> /// <param name="key"></param> /// <param name="value"></param> /// <param name="path"></param> /// <returns></returns> public static long DeleKeyValue(string section, string key, string value, string path) { return WritePrivateProfileString(section,key,null,path); } /// <summary> /// 刪除指定的小節(包括這個小節中所有的鍵) /// </summary> /// <param name="section"></param> /// <param name="key"></param> /// <param name="value"></param> /// <param name="path"></param> /// <returns></returns> public static long DeleSection(string section, string key, string value, string path) { return WritePrivateProfileString(section, null, null, path); } ///獲取某個section下的所有Key的位元組
public static byte[] IniReadValues(string section, string key, string path) { byte[] temp = new byte[255];
int i = GetPrivateProfileString(section, key, "", temp, 255, path); return temp; }
} }上述的程式碼我已封裝成dll檔案了,直接引用dll,就可以使用了,如何去使用,接下來就告訴大家。在程式根目錄下下新建一個文字文件,將字尾名改為.ini格式,其實和txt文字差不多,只是字尾名不一樣罷了,一般我們用ini檔案來做配置用,基本上大部分的軟體裡都會看到ini檔案,你們可以去看看。好了,文字文件建好後,看我的格式:
看起來是不是很簡單,大家看到ini檔案的格式後,第一感覺是什麼?會不會讓大家想到很窩心的Key-Value鍵值對。通過鍵來獲取值,是不是so easy啊。寫到這,基本的ini準備工作已經就緒了,接下來就是在winform中如何去呼叫了,這裡,我就舉個例子,教大家如何獲取鍵對應的值,我就用我封裝好的dll直接呼叫啦..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//新增及獲取操作
private void button1_Click(object sender, EventArgs e)
{
string str = Application.StartupPath + "\\SystemBase.ini";
//這個就是向檔案中寫入值,或者將相同的key的值覆蓋掉
iniFile.iniClass.WriteKeyValue("student", "name", "我是奧巴馬,我是大混蛋", str);
//這個是獲取鍵值
textBox1.Text = iniFile.iniClass.getKeyValue("student", "name", str);
//這個是將獲取的key位元組轉換成string的數值形式
string[] sectionList;
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] sectionByte = iniFile.iniClass.IniReadValues("student", null, str);
string sections = ascii.GetString(sectionByte);
sectionList = sections.Split(new char[1] { '\0' });
} //刪除操作 private void button2_Click(object sender, EventArgs e) { string str = Application.StartupPath + "\\SystemBase.ini"; //這個是刪除指定某個鍵的鍵值對 iniFile.iniClass.DeleKeyValue("student","age",null,str); //這個是刪除某個節點所有的鍵值對 iniFile.iniClass.DeleSection("student",null,null,str); } } }好了,基本的增刪獲取操作都已涉及到了,相信以大家的智慧,很容易吸收到。以後就可以用ini檔案替代xml了,當然有時候用xml還是比較好的。