当前位置:编程学习 > C#/ASP.NET >>

C# 配制文件不能修改吗?

我想知道C#自带的配制文件怎么用代码更新.
C#读取我己经知道了 ConfigurationSettings.AppSettings["Key"].ToString(); --------------------编程问答-------------------- 它是个xml文件,可以通过xmldom修改。

上面代码ToString() 也是多余的,索引器返回的本来就是string --------------------编程问答-------------------- 修改很简单,你必须打开它的一个实例才行,你刚才那个方法用的是静态属性,所以不能修改。
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove("Key");
config.AppSettings.Settings.Add("Key", "新的值");
config.Save();
--------------------编程问答--------------------
引用 2 楼 qldsrx 的回复:
修改很简单,你必须打开它的一个实例才行,你刚才那个方法用的是静态属性,所以不能修改。
C# code
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove("Key");
config.A……


没有尝试过,但是 感觉非常不错!!谢谢三楼!!! --------------------编程问答--------------------

 #region 修改config文件
        /// <summary>
        /// 修改配置文件
        /// </summary>
        /// <param name="key">节点名称</param>
        /// <param name="value">节点数据</param>
        public static void SetConfigValue(string key, string value)
        {
            bool isModified = false;
            foreach (string keyExist in ConfigurationManager.AppSettings)
            {
                if (keyExist == key)
                {
                    isModified = true;
                }
            }
            // Open App.Config of executable      
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            // You need to remove the old settings object before you can replace it      
            if (isModified)
            {
                config.AppSettings.Settings.Remove(key);
            }
            // Add an Application Setting.      
            config.AppSettings.Settings.Add(key, value);
            // Save the changes in App.config file.      
            config.Save(ConfigurationSaveMode.Modified);
            // Force a reload of a changed section.      
            ConfigurationManager.RefreshSection("appSettings");
        }

        #endregion

--------------------编程问答--------------------

System.Configuration.ConfigurationSettings.AppSettings["Key"]; 
但是现在FrameWork2.0已经明确表示此属性已经过时。并建议改为ConfigurationManager或WebConfigurationManager。并且AppSettings属性是只读的,并不支持修改属性值.
但是要想调用ConfigurationManager必须要先在工程里添加system.configuration.dll程序集的引用。(在解决方案管理器中右键点击工程名称,在右键菜单中选择添加引用,.net TablePage下即可找到)添加引用后可以用 String str = ConfigurationManager.AppSettings["Key"]来获取对应的值了。
更新配置文件: 
Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
//添加
cfa.AppSettings.Settings.Add("key", "Name")
//修改
cfa.AppSettings.Settings["BrowseDir"].Value = "name";
最后调用 
cfa.Save(); 
当前的配置文件更新成功。
ConfigurationManager.RefreshSection("appSettings");// 刷新命名节,在下次检索它时将从磁盘重新读取它。记住应用程序要刷新节点

参考:http://www.cnblogs.com/henw/archive/2012/01/31/2333783.html --------------------编程问答--------------------
引用楼主 zschuxin123456 的回复:
我想知道C#自带的配制文件怎么用代码更新.
C#读取我己经知道了   ConfigurationSettings.AppSettings[ "Key "].ToString();

一般需要修改下那个文件的读写属性后  再修改
以前写的一个小方法

 private bool saveSettings(string filePath)
        {
            System.IO.File.SetAttributes(filePath, System.IO.FileAttributes.Normal);
            List<AppSetting> appSettings = dgv_App.DataSource as List<AppSetting>;
            List<ConnSetting> connSettings = dgv_Conn.DataSource as List<ConnSetting>;
            XmlDocument doc = new XmlDocument();
            doc.Load(filePath);

            #region 保存修改后的配置项
            XmlNode appNode = doc.DocumentElement.SelectSingleNode("appSettings");
            if (appNode != null)
            {
                foreach (AppSetting appItem in appSettings)
                {
                    foreach (XmlNode item in appNode.ChildNodes)
                    {
                        if (item is XmlElement)
                        {
                            if ((item as XmlElement).Attributes["key"].Value == appItem.Key)
                                (item as XmlElement).Attributes["value"].Value = appItem.Value;
                        }
                    }
                }
            }
            #endregion

            #region 保存修改后的连接字串

            XmlNode conNode = doc.DocumentElement.SelectSingleNode("connectionStrings");
            if (conNode != null)
            {
                foreach (ConnSetting connItem in connSettings)
                {
                    foreach (XmlNode item in conNode.ChildNodes)
                    {
                         if (item is XmlElement)
                        {
                            if ((item as XmlElement).Attributes["name"].Value == connItem.ConnName)
                                (item as XmlElement).Attributes["connectionString"].Value = connItem.ConnString;
                        }
                    }
                }
            }

            #endregion
            doc.Save(filePath);
            return true;
        }
--------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,