配置文件中的节点:
<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 配置文件的具体例子,发我一份紧用作学习之用,谢谢~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)