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();
没有尝试过,但是 感觉非常不错!!谢谢三楼!!! --------------------编程问答--------------------
--------------------编程问答--------------------
#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 --------------------编程问答--------------------
一般需要修改下那个文件的读写属性后 再修改
以前写的一个小方法
--------------------编程问答--------------------
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#