首先,对于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还是比较好的。