1. 程式人生 > >ini檔案的簡單呼叫,相比xml更容易使用

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還是比較好的。