C#读取ini 配置⽂件
作者:
虽然微软早已经建议在WINDOWS中⽤注册表代替INI⽂件,但是在实际应⽤中,INI⽂件仍然有⽤武之地,尤其现在绿⾊软件的流⾏,越来越多的程序将⾃⼰的⼀些配置信息保存到了INI⽂件中。
INI⽂件是⽂本⽂件,由若⼲节(section)组成,在每个带括号的标题下⾯,是若⼲个关键词(key)及其对应的值(Value): [Section]
Key=Value
VC中提供了API函数进⾏INI⽂件的读写操作,但是微软推出的C#编程语⾔中却没有相应的⽅法,下⾯我介绍⼀个读写INI⽂件的C#类并利⽤该类保存窗体的坐标,当程序再次运⾏的时候,窗体将显⽰在上次退出时的位置。
INIFILE类:
using System;
using System.IO;
using System.Runtime.InteropServices;
因为我们需要调⽤API函数,所以必须创建System.Runtime.InteropServices命名空间以提供可⽤于访问 .NET 中的 COM 对象和本机
API 的类的集合。
三八祝福语简短
读取配置文件失败{
public class IniFile {
public string path; //INI⽂件名
[DllImport("kernel32")]WritePrivateProfileStri ng(string string val,string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileStrin g(string section,string key,string def, StringBuilder retVal,int size,string filePath);
//声明读写INI⽂件的API函数
public IniFile(string INIPath) {
path = INIPath;调⽤INIFILE类:新建⼀个标准的C# WINDOWS应⽤程序项⽬,在窗体中分别增加命名为sect、key、val的三个⽂本框。增加如下代码:
using Ini; //创建命名空间
当窗体关闭时保存窗体坐标
Form1_Closing(object System.ComponentM
odel.CancelEventArgs ini.IniWriteValue("LO C" ,"x" ,this.Location.X.ToStri ng()); ini.IniWriteValue("LO C " ,"y" ,this.Location.Y.ToStri ng()); //ToString ⽅法将数字转换为字符串}System.EventArgs e){ IniFile ini = new IniFile("C://test.ini"); Point p=new Point(); //判断返回值,避免第⼀次运⾏时为空出错 if ((ini.IniReadValue ("LOC" ,"x" )!="" ) && (ini.IniReadValue ("LOC" ,"y" )!="")) { p.X=int.Parse
(ini.IniReadValue ("LOC" ,"x" ));
p.Y =int.Parse (ini.IniReadValue
("LOC" ,"y" )); // int.Parse 将字符串转换为int
this.Location =p; }}
==============================================其他⽅法:
DllImport("kernel32.dll")]
吃葡萄干需要用水清洗吗public extern static int GetPrivateProfileString(string segName, string keyName, string sDefault, StringBuilder buffer, int nSize, string fileName);
public extern static int GetPrivateProfileStringA(string segName, string keyName, string sDefault, byte[] buffer, int iLen, string fileName); // ANSI版本
[DllImport("kernel32.dll")]
public extern static int GetPrivateProfileSection(string segName, StringBuilder buffer, int nSize, string fileName);
[DllImport("kernel32.dll")]
public extern static int WritePrivateProfileSection(string segName, string sValue, string fileName);
属马的命运[DllImport("kernel32.dll")]
public extern static int WritePrivateProfileString(string segName, string keyName, string sValue, string fileName);
职工带薪休假条例[DllImport("kernel32.dll")]
public extern static int GetPrivateProfileSectionNamesA(byte[] buffer, int iLen, string fileName);
Keys,⽹上关于这个
的代码⼤部分是错误
的,这⾥给出⼀个正确
的⽅法:
/// 返回该配置⽂
件中所有Section名称
的集合
public ArrayList
ReadSections()
{
byte[] buffer =
new byte[65535];
int rel = 0;//
GetPrivateProfileSecti
onNamesA(buffer,
buffer.GetUpperBoun
d(0), _FileName);
将进酒原文int iCnt, iPos;
ArrayList
arrayList = new
ArrayList();
string tmp;
if (rel > 0)
{
iCnt = 0;
iPos = 0;
for (iCnt =
0; iCnt < rel; iCnt++)
{
if
(buffer[iCnt] == 0x00)
{
tmp =
System.Text.ASCIIEn
coding.Default.GetStri
ng(buffer, iPos, iCnt -
iPos).Trim();
iPos =
iCnt + 1;
if (tmp
!= "")
arrayList.Add(tmp);
}
}
}
return
arrayList;
}
// 获取节点的所
有KEY值
发布评论