C#读写配置文件的问题,关闭软件后配置文件恢复原始值(急,在线等)

问题描述

很基础的问题,但我比较纳闷,以前也都是这么写的,没有出现问题啊,在IDE中运行Release版的程序写入配置文件,关闭程序后,配置文件又都恢复了App.config中的初始内容,应该是重新复制了App.config中的内容到其中,但也不是每次都会这样,我知道IDE调试时,写入的配置文件其实是写在了.vshost.exe.config文件中的。直接运行exe文件时,才会正确写入到.exe.config中,直接运行的我试的不多,不知道有没有这种情况出现。在网上搜到的问题大都是重新运行程序后才能读到最新的配置文件,是没有ConfigurationManager.RefreshSection("appSettings");//重新加载新的配置文件和我的问题不一样啊。我是不是有什么设置不对,以下是代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Configuration;//要添加对System.Configuration程序集的引用,在引用或者Bin文件夹上按右键选择添加引用。namespaceCtrlTest{///<summary>///对exe.Config文件中的appSettings段进行读写配置操作///注意:调试时,写操作将写在vhost.exe.config文件中///</summary>classMyConfiguration{staticobjectconfigVar=newobject();publicstaticboolSaveConfig(stringkey,stringvalue){try{lock(configVar){Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);if(config.AppSettings.Settings[key]==null){config.AppSettings.Settings.Add(key,value);}else{config.AppSettings.Settings[key].Value=value;}config.Save();//config.Save(ConfigurationSaveMode.Modified);ConfigurationManager.RefreshSection("appSettings");//重新加载新的配置文件}returntrue;}catch{returnfalse;}}///<summary>///在*.exe.config文件中appSettings配置节增加一对键、值对///</summary>///<paramname="newKey"></param>///<paramname="newValue"></param>publicstaticvoidUpdateAppConfig(stringnewKey,stringnewValue){boolisModified=false;foreach(stringkeyinConfigurationManager.AppSettings){if(key==newKey){isModified=true;}}lock(configVar){//OpenApp.ConfigofexecutableConfigurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);//Youneedtoremovetheoldsettingsobjectbeforeyoucanreplaceitif(isModified){config.AppSettings.Settings.Remove(newKey);}//AddanApplicationSetting.config.AppSettings.Settings.Add(newKey,newValue);//SavethechangesinApp.configfile.config.Save(ConfigurationSaveMode.Modified);//Forceareloadofachangedsection.ConfigurationManager.RefreshSection("appSettings");}}publicstaticstringGetConfig(stringkey){lock(configVar){Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);if(config.AppSettings.Settings[key]==null)return"";returnconfig.AppSettings.Settings[key].Value;//returnConfigurationManager.AppSettings[key];}}}}

AppConfig中的内容:<?xmlversion="1.0"encoding="utf-8"?><configuration><appSettings><addkey="Lexium23dPort"value="COM2"></add><addkey="MagPort"value="COM3"></add><addkey="FanPort"value="COM4"></add><addkey="MaxonHorPort"value="COM5"></add><addkey="MaxonVerPort"value="COM6"></add><addkey="JoyStickLexium23dPort"value="COM8"></add><addkey="JoyStickMaxonPort"value="COM7"></add><addkey="Lexium23dXNorLoad"value="70"></add><addkey="Lexium23dYNorLoad"value="50"></add><addkey="Lexium23dZNorLoad"value="120"></add><addkey="MaxonVerNorCurrent"value="520"></add><addkey="MaxonHorNorCurrent"value="300"></add><addkey="MaxonVelDValue"value="15"></add><addkey="Lexium23dXLength"value="15"></add><addkey="Lexium23dYLength"value="15"></add><addkey="Lexium23dZLength"value="15"></add><addkey="MaxonType"value="0"></add><addkey="MaxonVerNewNorCurrent"value="300"></add><addkey="MaxonHorNewNorCurrent"value="300"></add><addkey="Lexium23dXCoordinate"value="15"></add><addkey="Lexium23dYCoordinate"value="15"></add><addkey="Lexium23dZCoordinate"value="15"></add></appSettings></configuration>

解决方案

解决方案二:
用vc读写ini文件时,读完要释放buff。c#的没做过,不知道是不是这个原因。
解决方案三:
没有人可以回复一下吗,除楼上。
解决方案四:
试试把ConfigurationSaveMode函数中的config.Save(ConfigurationSaveMode.Modified);修改为config.Save();或者config.Save(ConfigurationSaveMode.Full);
解决方案五:
引用3楼songbing774933的回复:

试试把ConfigurationSaveMode函数中的config.Save(ConfigurationSaveMode.Modified);修改为config.Save();或者config.Save(ConfigurationSaveMode.Full);

是UpdateAppConfig函数
解决方案六:
会不会是权限问题
解决方案七:
引用5楼pengwu666的回复:

会不会是权限问题

不是选了ConfigurationUserLevel.None,所有用户都可以吗
解决方案八:
引用4楼songbing774933的回复:

Quote: 引用3楼songbing774933的回复:
试试把ConfigurationSaveMode函数中的config.Save(ConfigurationSaveMode.Modified);修改为config.Save();或者config.Save(ConfigurationSaveMode.Full);

是UpdateAppConfig函数

其实UpdateAppConfig函数都没用到,用的都是SaveConfig()函数,SaveConfig()函数中本来用的是config.Save(ConfigurationSaveMode.Modified),后来改为config.Save();但是这种问题还是会出现
解决方案九:
放心吧,直接运行时不会有这种情况。在IDE环境中有时会有发生,是因为你对项目进行过改动,所以会用App.config覆盖输出目录中的config。
解决方案十:
同意8楼,之前碰到过,是IDE调试环境的问题。脱离调试环境,独立运行再试一下
解决方案十一:
引用8楼qbilbo的回复:

放心吧,直接运行时不会有这种情况。在IDE环境中有时会有发生,是因为你对项目进行过改动,所以会用App.config覆盖输出目录中的config。

对项目进行过改动,是对什么进行了改动?是指在运行调试过后,又对项目进行了改动吗?我本来认为是这样的,但是我其实避免了运行调试后再去改它。
解决方案十二:
持续关注本问题

时间: 2024-08-01 16:58:39

C#读写配置文件的问题,关闭软件后配置文件恢复原始值(急,在线等)的相关文章

c-将含有指针的结构体写入文件,关闭程序后如何再次读写

问题描述 将含有指针的结构体写入文件,关闭程序后如何再次读写 从文件中读出一篇英文文章,若干行,每行最多不超过80个字符.首次运行都不会出现错误,关闭后再次读写文件就会出现错误 #include #include #include #include #include #define N 100 typedef struct lnode { char data; struct lnode *next; }Linklist; Linklist *Par[N]; struct paragraph {

电脑安装WPS系列办公软件后总是频繁弹出广告如何彻底解决

  电脑安装WPS系列办公软件后总是频繁弹出广告如何彻底解决         1.首先就是通过界面提供的关闭设置来关闭广告,点击右上角的菜单,选择更改为每周推荐一次,或者通过办理会员来关闭; 2.其实也不必办理会员,先右击WPS文字快捷方式,选择打开"属性"; 3.点击"打开文件所在的位置"按钮,进入wps安装目录; 4.依次点击进入10.1.0.5866(数字坐标名称文件)--wtoolex,找到wpsnotify.exe文件; 5.在wtoolex文件夹下新建一

SureHA 2.0集群软件卸载后的恢复方法

SureHA 2.0集群软件卸载后,可以使用原来的配置文件直接恢复. 1.保存原来的配置文件. 卸载HA软件前,首先需要保存原来的配置文件. 在webmanager切换到设定模式,在"文件"中选择"导出配置文件",如下图:   随后,将配置文件保存,如下图:   2.卸载HA软件: 3.重新安装HA软件: 4.导入HA的license: 5.打开webmanager,会出现提示,选择导入配置文件,如下图:   选中前面保存的配置文件,应用配置文件即可. 如果只是卸载

win7系统卸载软件后电脑无法正常启动黑屏了怎么办

  win7系统卸载软件后电脑无法正常启动黑屏了怎么办 1.按"Win+R",打开"运行"窗口,输入"msconfig"命令,按下回车打开系统配置; 2.在打开的系统配置窗口中,切换到"服务"标签页,把其中不必要的服务全部打勾,然后点击右下角的"全部禁用"; 3.再切换到"启动"标签页,把其中不必要的启动项全部打勾,然后点击右下角的"全部禁用",确认之后,重新启动Wi

win7系统下载K8录音软件后电脑会发生刺耳声音如何解决

win7系统下载K8录音软件后电脑会发生刺耳声音如何解决   解决方法如下: 1.由于我的笔记本一直处于尖锐异响的情况下,所以我首先将笔记本的音量降到最低或者直接点击对扬声器设置为静音; 2.但我们要正常的使用笔记本就不能让笔记本一直处于静音的状态.接下来小编就为大家介绍一劳永逸的解决办法.首先鼠标点击桌面右下方的喇叭符号; 3.接着会弹出一个小窗口,继续点击小窗口中的养扬声器符号; 4.接下来会弹出[扬声器属性]对话框,在对话框中点选上方的[级别]选项; 5.在[级别]界面中将麦克风设置为静音

电脑安装KeyShot软件后打开出现黑屏的解决方法

  电脑安装KeyShot软件后打开出现黑屏的解决方法          1.KeyShot软件的资源路径如果设置了中文路径,那么会导致KeyShot无法识别环境,无法加载,从而导致黑屏,这时需要依次点击编辑--首选项--文件夹,把对应的文件夹根据安装目录进行修改即可; 2.很多电脑是ATI显卡配置,而KeyShot默认设置了针对n卡的GPU加速,我们可以在编辑--首选项--高级里,取消勾选"图形特效",并重新打开软件即可.

电脑中安装KeyShot软件后打开出现黑屏如何解决

  电脑中安装KeyShot软件后打开出现黑屏如何解决           方法一: 造成这个问题的主要原因是安装过程中出现的中文路径问题,KeyShot软件的"Resource"若装在了中文路径,会导致KeyShot无法识别环境,无法加载,从而导致黑屏.修改下中文路径库,依次点击编辑>首选项>文件夹,把里面对应的文件夹根据安装目录改过去就可以了. 方法二: 如果电脑显卡是ATI的,而KeyShot默认设置了GPU加速,但这是针对n卡的加速功能,在编辑>首选项>

电脑安装LMS Amesim软件后提示错误启动失败怎么解决

  电脑安装LMS Amesim软件后提示错误启动失败怎么解决           1.打开LMS Imagine.Lab Amesim 14的安装目录,C:Program Files (x86)LMSLMS Imagine.Lab Amesimv1400licensing,找到该文件夹下的rlm应用程序; 2.双击运行rlm; 3.返回桌面,再次双击打开桌面上的LMS Amesim快捷方式即可打开.

如何清理win7系统卸载软件后残留的图标

  windows系统下,我们在对安装的程序进行删除时,一般都能够将软件的相关文件图标彻底删除,但不过有部分用户反映,在卸载程序后,桌面还会残留着相应程序的图标,必须通过手动才可清楚,对于该问题我们如何让软件在卸载时,一起清除桌面图标呢?下面看小编为大家带来的解决方法. 清理win7系统卸载软件后残留的图标方法1.首先同时按下键盘上的win+r快捷键打开电脑的运行窗口,然后在窗口中输入regedit并单击回车,这样就可以打开电脑的注册表编辑器窗口了. 2.在打开的注册表编辑器窗口中,依次展开左侧