下面是我做过的一个例子,你可以参考一下
public class inifile
{
#region 导入dll函数
[DllImport("kernel32.dll")]
public extern static int GetPrivateProfileIntA(string segname, string keyname, int idefault, string filename)
[DllImport("kernel32.dll")]
public extern static int GetPrivateProfileStringA(string segname, string keyname, string sdefault, StringBuilder retvalue, int nsize, string filename)
[DllImport("kernel32.dll")]
public extern static int GetPrivateProfileSectionA(string segname, byte[] sdata, int nsize, string filename)
[DllImport("kernel32.dll")]
public extern static int WritePrivateProfileSectionA(string segname, byte[] sdata, string filename)
[DllImport("kernel32.dll")]
public extern static int WritePrivateProfileStringA(string segname, string keyname, string svalue, string filename)
[DllImport("kernel32.dll")]
public extern static int GetPrivateProfileSectionNamesA(byte[] vdata, int ilen, string filename)
#endregion
private string _path
/// <summary>
/// 所有的设置节
/// </summary>
public inisegments segments
/// <summary>
/// 构造函数
/// </summary>
/// <param name="vpath">ini文件路径</param>
public inifile(string vpath)
{
_path = vpath
segments = new inisegments(this)
byte[] bufsegs = new byte[32767]
int rel = GetPrivateProfileSectionNamesA(bufsegs, 32767, _path)
int icnt, ipos
string tmp
if (rel >0)
{
icnt = 0ipos = 0
for (icnt = 0icnt <relicnt++)
{
if (bufsegs[icnt] == 0x00)
{
tmp = System.Text.ASCIIEncoding.Default.GetString(bufsegs, ipos, icnt).Trim()
ipos = icnt + 1
if (tmp != "")
segments.add(tmp)
}
}
}
}
/// <summary>
/// 获取ini文件路径
/// </summary>
public string path
{
get { return _path}
}
/// <summary>
/// 读取一个整数型的设置值
/// </summary>
/// <param name="segname">设置节名</param>
/// <param name="keyname">设置项名</param>
/// <param name="idefault">默认值</param>
/// <returns>设置值</returns>
public int getint(string segname, string keyname, int idefault)
{
return GetPrivateProfileIntA(segname, keyname, idefault, _path)
}
/// <summary>
/// 读取一个字符串型设置值
/// </summary>
/// <param name="segname">设置节名</param>
/// <param name="keyname">设置项名</param>
/// <param name="sdefault">默认值</param>
/// <returns>设置值</returns>
public string getstring(string segname, string keyname, string sdefault)
{
StringBuilder red = new StringBuilder(1024)
GetPrivateProfileStringA(segname, keyname, "", red, 1024, _path)
return red.ToString()
}
/// <summary>
/// 写入设置项
/// </summary>
/// <param name="segname">设置节名</param>
/// <param name="keyname">设置项名</param>
/// <param name="vvalue">设置值</param>
public void setstring(string segname, string keyname, string vvalue)
{
WritePrivateProfileStringA(segname, keyname, vvalue, _path)
}
/// <summary>
/// 写入一个设置节
/// </summary>
/// <param name="segname">设置节名</param>
/// <param name="vdata">数据</param>
/// <remarks>
/// 数据为多个设置项组成的字符串,每个设置项之间用 "\0" 分割
/// 字符串最后用 "\0\0" 结束
/// </remarks>
/// <example>
/// writesegment(segname,"\0\0")能用于清除一个设置节下的所有设置项
/// </example>
public void writesegment(string segname, string vdata)
{
WritePrivateProfileSectionA(segname, System.Text.ASCIIEncoding.Default.GetBytes(vdata), _path)
}
/// <summary>
/// 读取一个设置节下面的所有设置项
/// </summary>
/// <param name="o">要读取的设置节</param>
public void getsegment(inisegment o)
{
byte[] vdata = new byte[32767]
int rlen = GetPrivateProfileSectionA(o.name, vdata, 32767, _path)
o.items.Clear()
if (rlen <1) return
string tmp = ""
int ipos, icnt
ipos = 0
for (icnt = 0icnt <rlenicnt++)
{
if (vdata[icnt] == 0x00)
{
tmp = System.Text.ASCIIEncoding.Default.GetString(vdata, ipos, icnt - ipos).Trim()
if (tmp != "")
{
string[] t = tmp.Split('=')
if (t.Length <= 1)
o.items.add(t[0], "")
else
o.items.add(t[0], t[1])
}
ipos = icnt + 1
}
}
}
}
用的时候就直接实例化这个写好的方法类 进行编辑
string COM = new inifile("ini文件地址").segments["分类名称"].items["子项属性"].value
这样就可以获取。
例如:
人(分类名称)
身高(子项属性)=100
体重(子项属性)=55
inifile ini = new inifile("ini文件路径")
ini.setstring("需要修改的分类名", "子项", "值")
都可以,看你自己选择了txt需要自定义格式
xml可以用XmlDocument *** 作
ini要通过DllImport("kernel32")来引入外部函数 *** 作
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)