App.config文件里的内容没有了,附上config文件操作源代码,大侠帮忙指教,帮顶有分:)多谢啦

scm_2008 2014-08-04 11:04:26
如题,App.config成了空文件,难怪程序读不到任何配置。经过了解,初步认为是由于电脑突然断电,死机,蓝屏等引起的,各种操作系统均有遇到过,还请大侠帮忙找到问题根源。下面附上App.config操作的类

/// <summary> 对App.config中AppSettings操作的类 </summary>
public class AppSettingsManager
{
/// <summary> 获取指定键对应的值 </summary>
///<param name="key">键</param>
public static string GetValue(string key)
{
string value = string.Empty;
try
{
//value=ConfigurationManager.AppSettings[key];
//下面代码可以读取最新值
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
value = config.AppSettings.Settings[key].Value;
}
catch (Exception ex)
{
LogFile.WriteLogInfo(ex.Message, String.Format("AppSettingsManager.GetValue({0})", key));
}
return value;
}
/// <summary> 设置指定键的值 </summary>
///<param name="key">键</param>
///<param name="value">值</param>
public static bool SetValue(string key, string value)
{
try
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings[key].Value = value;
config.Save(ConfigurationSaveMode.Modified);
return true;
}
catch (Exception ex)
{
LogFile.WriteLogInfo(ex.Message, String.Format("AppSettingsManager.SetValue(key={0},value={1}", key, value));
return false;
}
}
/// <summary>指定键值是否存在 </summary>
///<param name="key">键</param>
public static bool ContainKey(string key)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string[] allKey = config.AppSettings.Settings.AllKeys;
foreach (string item in allKey)
{
if (item == key)
{
return true;
}
}
return false;
}
/// <summary>添加键值 </summary>
///<param name="key">键</param>
///<param name="value">值</param>
public static bool AddKeyValue(string key, string value)
{
try
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Add(key, value);
config.Save(ConfigurationSaveMode.Modified);
return true;
}
catch (Exception ex)
{
LogFile.WriteLogInfo(ex.Message, String.Format("AppSettingsManager.AddKeyValue(key={0},value={1})", key, value));
return false;
}
}
}
...全文
201 点赞 收藏 10
写回复
10 条回复
ZhongGuanYao 2014年08月04日
楼主在config.Save(ConfigurationSaveMode.Modified);后面加多一行代码试试: ConfigurationManager.RefreshSection("appSetting");//重新加载新的配置文件
回复 点赞
於黾 2014年08月04日
写入不同文件还有个好处就是处理起来简单,各种数据有各自的格式,读取写入的时候直接循环把对应数据往里填就行了,而不用再做一大堆校验.
回复 点赞
於黾 2014年08月04日
建议不同功能分开写入不同的配置文件,不要什么都往里写. 这样即使某个文件出问题,文件丢失,或内容丢失,不会造成重大影响.
回复 点赞
scm_2008 2014年08月04日
引用 4 楼 wangnaisheng 的回复:
但是如果你写了,类似事物,失败回滚的话,那就什么都没有…… 或是失败你删除内容什么的,没调试看看啊。
失败后只有写入Log。 至今在我公司电脑上都没有重现过此问题,所以调试没效果的。 在窗体关闭的时侯,我会把关闭时窗体的大小及位置写入App.config,可能是这引起的?
回复 点赞
wangnaisheng 2014年08月04日
引用 3 楼 scm_2008 的回复:
[quote=引用 2 楼 wangnaisheng 的回复:] 是没有内容了,还是没读取到内容。 没读取到内容,可能是路径的问题。 没有内容是否是你保存内容没保存上。
App.config文件打开后是全空白的,一行都没有。 比方说,一个文件咱写入失败的话,原有内容也应该还在的吧。[/quote] 但是如果你写了,类似事物,失败回滚的话,那就什么都没有…… 或是失败你删除内容什么的,没调试看看啊。
回复 点赞
scm_2008 2014年08月04日
引用 2 楼 wangnaisheng 的回复:
是没有内容了,还是没读取到内容。 没读取到内容,可能是路径的问题。 没有内容是否是你保存内容没保存上。
App.config文件打开后是全空白的,一行都没有。 比方说,一个文件咱写入失败的话,原有内容也应该还在的吧。
回复 点赞
wangnaisheng 2014年08月04日
是没有内容了,还是没读取到内容。 没读取到内容,可能是路径的问题。 没有内容是否是你保存内容没保存上。
回复 点赞
bafzxzh 2014年08月04日
http://blog.csdn.net/zouyujie1127/article/details/9317415
回复 点赞
scm_2008 2014年08月04日
引用 7 楼 Z65443344 的回复:
写入不同文件还有个好处就是处理起来简单,各种数据有各自的格式,读取写入的时候直接循环把对应数据往里填就行了,而不用再做一大堆校验.
非常认同,如果新项目要写配置,肯定按你说的这样写,但这个项目不打算改这个地方了,把这个BUG解决了即可。
回复 点赞
scm_2008 2014年08月04日
引用 8 楼 xiangxinzijiwonen 的回复:
楼主在config.Save(ConfigurationSaveMode.Modified);后面加多一行代码试试: ConfigurationManager.RefreshSection("appSetting");//重新加载新的配置文件
config是通过 ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) 得到的,因此无需添加 ConfigurationManager.RefreshSection(sectionName); 那个方法只对ConfigurationManager.AppSettings[""]这类静态属性有影响,直接通过OpenExeConfiguration方法打开的特殊对象不受影响。 摘自http://bbs.csdn.net/topics/370136220
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告