用winform c# 实现从app.config中读取数据,然后读取其中一个子节点里面设置的值 请写上详细代码

用winform c# 实现从app.config中读取数据,然后读取其中一个子节点里面设置的值 请写上详细代码,第1张

配置文件中的节点:

<appSettings>

<add key="test" value="testValue"/>

</appSettings>

代码

string _value=SystemConfigurationConfigurationManagerAppSettings["test"]ToString();

你的意思是不是说写了一个C#Windows窗体程序,在程序中读取一个ini账号密码配置文件,又把这程序做成开机自启动,程序会报错?但是直接点击启动应用程序时可以读取ini文件?如果是的话,没人看得到你的源码,谁也回答不了你。真的要有意义的回答,请贴上你的相关代码供参考!

从这个代码上看,既然直接执行程序可以读取Configlandini文件,那证明读取文件的方法是可以的。但是问题可能出在iniFileReadInivalue这个方法中。也许读取文本需要特定的文本格式,但开机时候这个文本的初始化工作没做好。这样吧,你开机以后如果还是显示不能读取文件,先直接把那个ini文件拷贝出来。再直接执行一下应用程序,如果这时候一切正常,在比较一下原先的文件与现在的ini文件有什么不同。如果确实文本不一样,那读取方法就会出错。

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

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

public class inifile

{

#region 导入dll函数

[DllImport("kernel32dll")]

public extern static int GetPrivateProfileIntA(string segname, string keyname, int idefault, string filename);

[DllImport("kernel32dll")]

public extern static int GetPrivateProfileStringA(string segname, string keyname, string sdefault, StringBuilder retvalue, int nsize, string filename);

[DllImport("kernel32dll")]

public extern static int GetPrivateProfileSectionA(string segname, byte[] sdata, int nsize, string filename);

[DllImport("kernel32dll")]

public extern static int WritePrivateProfileSectionA(string segname, byte[] sdata, string filename);

[DllImport("kernel32dll")]

public extern static int WritePrivateProfileStringA(string segname, string keyname, string svalue, string filename);

[DllImport("kernel32dll")]

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 = 0; ipos = 0;

for (icnt = 0; icnt < rel; icnt++)

{

if (bufsegs[icnt] == 0x00)

{

tmp = SystemTextASCIIEncodingDefaultGetString(bufsegs, ipos, icnt)Trim();

ipos = icnt + 1;

if (tmp != "")

segmentsadd(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 redToString();

}

/// <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, SystemTextASCIIEncodingDefaultGetBytes(vdata), _path);

}

/// <summary>

/// 读取一个设置节下面的所有设置项

/// </summary>

/// <param name="o">要读取的设置节</param>

public void getsegment(inisegment o)

{

byte[] vdata = new byte[32767];

int rlen = GetPrivateProfileSectionA(oname, vdata, 32767, _path);

oitemsClear();

if (rlen < 1) return;

string tmp = "";

int ipos, icnt;

ipos = 0;

for (icnt = 0; icnt < rlen; icnt++)

{

if (vdata[icnt] == 0x00)

{

tmp = SystemTextASCIIEncodingDefaultGetString(vdata, ipos, icnt - ipos)Trim();

if (tmp != "")

{

string[] t = tmpSplit('=');

if (tLength <= 1)

oitemsadd(t[0], "");

else

oitemsadd(t[0], t[1]);

}

ipos = icnt + 1;

}

}

}

}

用的时候就直接实例化这个写好的方法类 进行编辑

string COM = new inifile("ini文件地址")segments["分类名称"]items["子项属性"]value

这样就可以获取。

例如:

人(分类名称)

身高(子项属性)=100

体重(子项属性)=55

inifile ini = new inifile("ini文件路径");

inisetstring("需要修改的分类名", "子项", "值");

以上就是关于用winform c# 实现从app.config中读取数据,然后读取其中一个子节点里面设置的值 请写上详细代码全部的内容,包括:用winform c# 实现从app.config中读取数据,然后读取其中一个子节点里面设置的值 请写上详细代码、C# Winform获取INI文件信息失败、我是一个初学者,谁有 c# winform 中用到ini 配置文件的具体例子,发我一份紧用作学习之用,谢谢~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9688124.html

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

发表评论

登录后才能评论

评论列表(0条)

保存