Runtime Web.config / App.config Editing

该博客展示了一段C#代码,实现了对AppConfig配置文件的操作。定义了ConfigFileType枚举,包含WebConfig和AppConfig类型。AppConfig类继承自System.Configuration.AppSettingsReader,提供了设置值、移除元素等方法,通过XmlDocument进行配置文件的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘自http://www.eggheadcafe.com/articles/20030907.asp
using System;
using System.Xml;  
using System.Configuration;
using System.Collections;
using System.Reflection;  
using System.Diagnostics ;

public enum   ConfigFileType
{
 WebConfig ,
 AppConfig
}

public class AppConfig : System.Configuration.AppSettingsReader
{ 
 public string  docName = String.Empty;
 private  XmlNode node=null;

 private int _configType;
public int ConfigType { get { return _configType; } set { _configType=value; } } public bool SetValue(string key, string value) { XmlDocument cfgDoc = new XmlDocument(); loadConfigDoc(cfgDoc); // retrieve the appSettings node node = cfgDoc.SelectSingleNode("//appSettings"); if( node == null ) { throw new System.InvalidOperationException( "appSettings section not found"); } try { // XPath select setting "add" element that contains this key XmlElement addElem= (XmlElement)node.SelectSingleNode("//add[@key='" +key +"']") ; if (addElem!=null) { addElem.SetAttribute("value",value); } // not found, so we need to add the element, key and value else { XmlElement entry = cfgDoc.CreateElement("add"); entry.SetAttribute("key",key); entry.SetAttribute("value",value); node.AppendChild(entry); } //save it saveConfigDoc(cfgDoc,docName); return true; } catch { return false; } } private void saveConfigDoc(XmlDocument cfgDoc,string cfgDocPath) { try { XmlTextWriter writer = new XmlTextWriter( cfgDocPath , null ); writer.Formatting = Formatting.Indented; cfgDoc.WriteTo( writer ); writer.Flush(); writer.Close(); return; } catch { throw; } } public bool removeElement ( string elementKey) { try { XmlDocument cfgDoc = new XmlDocument(); loadConfigDoc(cfgDoc); // retrieve the appSettings node node = cfgDoc.SelectSingleNode("//appSettings"); if( node == null ) { throw new System.InvalidOperationException( "appSettings section not found"); } // XPath select setting "add" element that contains this key to remove node.RemoveChild( node.SelectSingleNode("//add[@key='" +elementKey +"']") ); saveConfigDoc(cfgDoc,docName); return true; } catch { return false; } } private XmlDocument loadConfigDoc( XmlDocument cfgDoc ) { // load the config file if( Convert.ToInt32(ConfigType)==Convert.ToInt32(ConfigFileType.AppConfig)) { docName= ((Assembly.GetEntryAssembly()).GetName()).Name; docName += ".exe.config"; } else { docName=System.Web.HttpContext.Current.Server.MapPath("web.config"); } cfgDoc.Load( docName ); return cfgDoc; } }
<think>嗯,用户遇到了一个关于Vim的交换文件的问题。让我仔细看看这个情况。首先,用户打开文件时,Vim提示找到了一个交换文件,名为.COMMIT_EDITMSG.swp,时间戳比当前文件还旧。这说明可能有其他程序正在编辑同一个文件,或者之前的编辑会话崩溃了。 用户可能是在使用Git提交时,触发了Git的编辑器(比如Vim)来编写提交信息,但中途可能因为某种原因导致Vim异常退出,比如系统崩溃、强制关闭终端,或者误操作退出了Vim而没有正确保存。这时候,Vim会留下.swp交换文件,用来恢复未保存的更改。 现在用户看到这个提示,需要知道如何处理。根据提示,有两种可能性:一是其他进程正在编辑该文件,但根据时间戳显示当前文件比交换文件新,可能更可能是第二种情况,即之前的编辑崩溃了。用户需要选择是否恢复更改或者删除交换文件继续。 需要注意的是,这个文件位于.git目录下,属于Git的提交信息临时文件。如果用户之前没有完成提交,可能需要恢复这个交换文件来获取未保存的提交信息。但如果在崩溃后已经成功提交,或者不再需要之前的更改,直接删除交换文件即可。 另外,用户可能对Vim的操作不太熟悉,特别是如何处理交换文件和恢复数据。需要给出明确的步骤,比如使用:recover命令,或者运行vim -r来恢复,然后保存退出,并删除.swp文件。同时,要提醒用户注意,如果有多个交换文件存在的情况,可能需要检查更早的备份。 最后,还要建议用户如何避免这种情况,比如正确退出Vim,或者在遇到问题时及时处理交换文件,避免积累。这样用户以后在使用Git和Vim时能更顺利地进行提交操作。</think>这个提示是Vim编辑器在检测到文件存在交换文件(swap file)时的标准警告,常见于以下两种场景: $$.git/COMMIT\_EDITMSG$$文件是Git提交时生成的临时文件,这里提示的.swp文件是Vim崩溃后残留的交换文件。 ### 处理步骤建议: 1. **判断文件状态** - 使用`git status`查看当前提交状态 - 如果已有成功提交记录,说明当前文件不需要恢复 2. **恢复数据(二选一)** ```bash # 方式一:在Vim中执行恢复命令 :recover # 方式二:通过命令行直接恢复 vim -r /Users/john.xu/.../.git/COMMIT_EDITMSG ``` 3. **后续操作** - 成功恢复后立即`:wq`保存退出 - 必须手动删除交换文件: ```bash rm /Users/john.xu/.../.git/.COMMIT_EDITMSG.swp ``` ### 注意事项: 1..swp文件生成时间是2025年3月5日14:25(根据提示中的`dated: 三 3 05 14:25:47 2025`) 2. 当前文件修改时间是14:27:52,比交换文件新(说明最近可能已有成功提交) 3. 如果确认不需要恢复,直接删除.swp文件即可继续工作 ### 预防措施: 1. 规范退出Vim流程(先`:wq`保存退出) 2. 设置Vim自动保存: ```vim " 在~/.vimrc中添加 set autowrite # 自动保存修改 set swapfile # 确保交换文件功能开启 set dir=~/tmp/vim # 指定专用交换文件目录 ``` 这个提示是Vim的正常保护机制,按照上述流程操作即可安全解决。Git相关操作不会因此受影响,但建议完成处理后执行`git status`确认仓库状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值