我是一个初学者,谁有 c# winform 中用到ini 配置文件的具体例子,发我一份紧用作学习之用,谢谢~

我是一个初学者,谁有 c# winform 中用到ini 配置文件的具体例子,发我一份紧用作学习之用,谢谢~,第1张

你得先下载一个kernel32.dll然后在你的项目中添加引用

下面是我做过的一个例子,你可以参考一下

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")来引入外部函数 *** 作


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11637009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存