您的位置:首页 > 移动开发

winform读取配置文件App.config

2017-12-20 10:23 513 查看
有时候一些用户的配置需要写入在本地,不能每次程序启动都让用户重新设置一下吧。

下面先说基本用法:

1、创建winform项目之后自动会生成App.config文件,如果默认没有就对项目右键-新建项-配置文件

这个文件创建后自动就有的,如果没有就新建一个,我们可以往里面添加需要的数据:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="key1" value="hello"/>
<add key="key2" value="world!"/>
</appSettings>
</configuration>


里面的appSettings节点和子节点就是我们添加上去的

2、读写

项目的引用增加System.Configuration,然后在cs文件引入System.Configuration

然后这样就可以读到数据了:

string key1 = ConfigurationManager.AppSettings["key1"];
Debug.WriteLine("key1=" + key1);


这样修改数据:

ConfigurationManager.AppSettings.Set("key1","new hello!");
Debug.WriteLine("new-key1=" + ConfigurationManager.AppSettings["key1"]);
一切看起来都非常简单,没有什么问题,打印出来显示都是正确的。

实际上他设置的时候并没有真正写入xml,而是修改了内存中的值而已!

3、正确的做法应该是按照对待一个普通的xml来进行读写操作,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace TestConfig
{
class ConfigSettings
{
private ConfigSettings() { }
public static string ReadSetting(string key)
{
//不建议通过这种自带的方式进行读取;如果手动修改了配置文件,则不会第二次读取的时候,依旧是内存中的值。可以通过XML方式进行读取。
//return ConfigurationSettings.AppSettings[key];
XmlDocument doc = loadConfigDocument();

XmlNode node = doc.SelectSingleNode("//appSettings");

if (node == null)
throw new InvalidOperationException("appSettings section not found in config file.");

try
{
XmlElement elem = (XmlElement)node.SelectSingleNode(string.Format("//add[@key='{0}']", key));

if (elem != null)
{
return elem.GetAttribute("value");
}
}
catch
{
throw;
}

return "";
}

public static void WriteSetting(string key, string value)
{
XmlDocument doc = loadConfigDocument();

XmlNode node = doc.SelectSingleNode("//appSettings");

if (node == null)
throw new InvalidOperationException("appSettings section not found in config file.");

try
{
XmlElement elem = (XmlElement)node.SelectSingleNode(string.Format("//add[@key='{0}']", key));

if (elem != null)
{
elem.SetAttribute("value", value);
}
else
{
elem = doc.CreateElement("add");
elem.SetAttribute("key", key);
elem.SetAttribute("value", value);
node.AppendChild(elem);
}
doc.Save(getConfigFilePath());
}
catch
{
throw;
}
}

public static void RemoveSetting(string key)
{
XmlDocument doc = loadConfigDocument();

XmlNode node = doc.SelectSingleNode("//appSettings");

try
{
if (node == null)
throw new InvalidOperationException("appSettings section not found in config file.");
else
{
node.RemoveChild(node.SelectSingleNode(string.Format("//add[@key='{0}']", key)));
doc.Save(getConfigFilePath());
}
}
catch(NullReferenceException e)
{
throw new Exception(string.Format("The key {0} does not exist.", key), e);
}
}

private static XmlDocument loadConfigDocument()
{
XmlDocument doc = null;
try
{
doc = new XmlDocument();
doc.Load(getConfigFilePath());
return doc;
}
catch (System.IO.FileNotFoundException e)
{
throw new Exception("No configuration file found.", e);
}
}

private static string getConfigFilePath()
{
return Assembly.GetExecutingAssembly().Location + ".config";
}
}
}


参考文章:https://www.cnblogs.com/zfanlong1314/p/3623622.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  config