如何立即保存app.config


摘自  http://bbs.csdn.net/topics/320041030


public void saveValue(string Name, string Value)

        {
            //ConfigurationManager.RefreshSection(Name);
            ConfigurationManager.AppSettings.Set(Name, Value);


            Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
            config.AppSettings.Settings[Name].Value = Value;
            config.Save(ConfigurationSaveMode.Modified);
            //config.fl
            config = null;
        }
用上面的函数总是等到程序运行结束,才将数据保存进去,哪位知道怎么立即保存?


无法立即保存,这是app.config的机制,在程序运行结束后才会更新至app.config



        private static string _appconfig = null;


        /// <summary>
        /// 获取或设置需要配置或读取的App.Config的文件名,若赋值为空(或未曾赋值)则下次读取该属性将取得调用方的EXE的默认config,否则返回上次设置的值。
        /// </summary>
        public static string AppConfig
        {
            get
            {
                if (_appconfig == null)
                {
                    Type t = typeof(System.Configuration.ConfigurationManager).Assembly.GetType("System.Configuration.ClientConfigurationHost");
                    object cfghst = Activator.CreateInstance(t, true);
                    PropertyInfo pi = t.GetProperty("ConfigPaths", BindingFlags.Instance | BindingFlags.NonPublic);
                    object cfgpath = pi.GetValue(cfghst, null);


                    Type t1 = typeof(System.Configuration.ConfigurationManager).Assembly.GetType("System.Configuration.ClientConfigPaths");
                    pi = t1.GetProperty("ApplicationConfigUri", BindingFlags.Instance | BindingFlags.NonPublic);
                    string path = (string)pi.GetValue(cfgpath, null);


                    if (string.IsNullOrEmpty(path))
                        _appconfig = string.Empty;
                    else
                        _appconfig = path.Replace(".vshost.", ".");
                }
                return _appconfig;
            }
            set
            {
                _appconfig = value;
            }
        }
        /// <summary>
        /// 提供直接修改AppConfig内配置值得方法
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        public static void SetSettingToAppConfig(string key, string value)
        {
            if (string.IsNullOrEmpty(key))
            {
                throw new Exception("AppConfig的配置中,key不能为空");
            }
            else
            {
                key = key.Trim();
            }
            if (string.IsNullOrEmpty(value))
                value = "";
            else
                value = value.Trim();


            if (!File.Exists(AppConfig))
            {
                throw new DirectoryNotFoundException();
            }
            File.SetAttributes(AppConfig, FileAttributes.Normal);
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(AppConfig);
            XmlNodeList xmllst = xmldoc.SelectNodes("/configuration/appSettings/add");
            if (xmldoc.SelectSingleNode("/configuration/appSettings") == null)
            {
                XmlNode n2 = xmldoc.CreateNode("element", "appSettings", "");
                n2.InnerXml = "<add key=\"" + key + "\" value=\"" + value + "\"/>";
                xmldoc.SelectSingleNode("/configuration").AppendChild(n2);
                xmldoc.Save(AppConfig);
            }
            else if (xmllst.Count == 0)
            {
                XmlNode n2 = xmldoc.CreateNode("element", "add", "");
                XmlAttribute xa = xmldoc.CreateAttribute("key");
                xa.Value = key;
                n2.Attributes.Append(xa);
                xa = xmldoc.CreateAttribute("value");
                xa.Value = value;
                n2.Attributes.Append(xa);
                xmldoc.SelectSingleNode("/configuration/appSettings").AppendChild(n2);
                xmldoc.Save(AppConfig);
            }
            else
            {
                bool existed = false;
                foreach (XmlNode n1 in xmllst)
                {
                    if (n1.Attributes["key"].Value.ToUpper() == key.ToUpper())
                    {
                        n1.Attributes["value"].Value = value;
                        xmldoc.Save(AppConfig);
                        existed = true;
                        break;
                    }
                }
                if (!existed)
                {
                    XmlNode xmlnd = xmldoc.SelectSingleNode("/configuration/appSettings");
                    XmlNode n2 = xmldoc.CreateNode("element", "add", "");
                    XmlAttribute xa = xmldoc.CreateAttribute("key");
                    xa.Value = key;
                    n2.Attributes.Append(xa);
                    xa = xmldoc.CreateAttribute("value");
                    xa.Value = value;
                    n2.Attributes.Append(xa);
                    xmlnd.AppendChild(n2);
                    xmldoc.Save(AppConfig);
                }
            }
            ConfigurationManager.RefreshSection("appSettings");
        }

你可能感兴趣的:(如何立即保存app.config)