C# XMl读写配置文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# XMl读写配置文件相关的知识,希望对你有一定的参考价值。
我可以手动建一个初始的配置文件,当然高手帮忙写下格式xml,大意是
serv_ip=192.168.0.1
connect_time=30
refresh_time=60
serv_port=3000
用xml写个格式吧先,实际然后程序启动界面会修改值,然后这里我想请教高手,
第一怎么读出来 复制给字段
第二 操作人员修改了字段 我怎么修改那些默认的参数xml 谢谢了
<serv_ip>192.168.0.1</serv_ip>
<connect_time>30</connect_time>
<refresh_time>60</refresh_time>
<serv_port>3000</serv_port>
</config>
一般像这样就行了 很简单的
或者多个配置你可以加个item标签如:
<config><item>
<serv_ip>192.168.0.1</serv_ip>
<connect_time>30</connect_time>
<refresh_time>60</refresh_time>
<serv_port>3000</serv_port>
</item>
<item>
<serv_ip>192.168.0.2</serv_ip>
<connect_time>30</connect_time>
<refresh_time>60</refresh_time>
<serv_port>3000</serv_port>
</item>
</config>
假定xml文件路径为:path
读取和保存:
using system.xml;XmlDocument xml = new XmlDocument();//声明xml
xml.Load(path);//按路径读xml文件
xmlnode root=xml.selectsinglenode("config");//指向根节点
xmlnode xn=root.selectsinglenode("serv_ip");//指向根节点下的serv_ip节点
string ip=xn.innertext;//读出里面的值 注意读取的是string 需要类型转换的话自己做
//修改:
xn.innertext="192.168.2.2";
xml.save(path);//保存更改到路径追问
你回答的很好你这个每次 单独找config 又单独找serv 很麻烦哦,能不能这样
我自己定义四个字段,一次从xml读出赋值, 修改后依次写入xml在保存 给个read 和write的方法可以吗??
单独一个config是因为xml的格式要求的要有个根节点
要理解xml本质上你可以把它理解为一个树的结构 格式的要求没法省略
使用system.xml
不给类方法了 这么简单的 直接百度下怎么使用system.xml读写xml文件不会吗?
什么都给你做了还有什么意思
我能说按照你的读 根本读不出来吗???string ip=xn.innertext;/ 调试不了
追答自己看demo vs2010
还有注意大小写
你之前给的xml 多了item ,还是谢谢,最后我想说,我要是百度的出来,我还问个“鸟8”!
追答思考一下 item节点那个是为了让你做多个配置 到时候你就可以直接切换
研究一下xml的结构:
首先是:
<?xml version="1.0" encoding="utf-8" ?>
用来声明xml的版本和所使用的编码 可以有 也可以省略 省略的情况下就是默认utf-8编码
以下面这个为例:
<config><item>
<serv_ip>192.168.0.1</serv_ip>
<connect_time>30</connect_time>
<refresh_time>60</refresh_time>
<serv_port>3000</serv_port>
</item>
<item>
<serv_ip>192.168.0.2</serv_ip>
<connect_time>30</connect_time>
<refresh_time>60</refresh_time>
<serv_port>3000</serv_port>
</item>
</config>
我们可以把它画成树:
config是根节点 两个item是他的孩子节点 几个配置项就是item的孩子节点
xml就是这样来描述一个树结构数据的 然后百度下"system.xml" 找到msdn的内容 好好看看
一般只会用的xmlDocment 这些掌握了一般的xml操作也就没有什么问题了
首先创建配置文件:config.xml
<AppConfig xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ServerIPAddress>Configs\\ImportConfig\\FullImportConfig.xml</ServerIPAddress>
<ConnectTime>30</ConnectTime>
<RefreshTime>60</RefreshTime>
<ServerPort>3000</ServerPort>
</AppConfig>追问
期待大神粗线!把xml格式也甩上来啊
追答首先创建配置文件:config.xml
<?xml version="1.0" encoding="utf-8" ?><AppConfig>
<ServerIPAddress>192.168.0.1</ServerIPAddress>
<ConnectTime>30</ConnectTime>
<RefreshTime>60</RefreshTime>
<ServerPort>3000</ServerPort>
</AppConfig>
再创建相关实体类:
public string ServerIPAddress get;set;
public int ConnectTime get;set;
public int RefreshTime get;set;
public int ServerPort get;set;
然后由实体提供Save和Load方法,就可以实现读到和写入了!
NND,说我超字数了,你追问下,我才能帖下面的代码了
追问呵呵 大神指教下一步
追答public static bool SaveConfig(string strConfigPath, T obj)
string strContent = XmlHelper.XmlSerialize(obj);
strConfigPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, strConfigPath);
using (FileStream fileStream = new FileStream(strConfigPath, FileMode.Open, FileAccess.Write, FileShare.Read))
byte[] datas = new UTF8Encoding().GetBytes(strContent);
StreamWriter streamWriter = new StreamWriter(fileStream, System.Text.Encoding.UTF8);
fileStream.SetLength(datas.Length);
fileStream.Seek(0, SeekOrigin.Begin);
streamWriter.Write(strContent);
streamWriter.AutoFlush = true;
streamWriter.Flush();
streamWriter.Close();
fileStream.Close();
return true;
又超字符了,待续....
C#读取XML文件的基类实现
刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node.Attribute(name)方法,因此,想到结合之前所做的XML操作,完成了一个能够读取XML文件的基类,便于以后的使用。
PS:即使再老套的代码,目前也不敢进行优化,一是水平不行,二是不敢。
使用静态扩展类,扩展了几个经常使用的类型,能够方便数据的读写。
操作XML的类,可以直接继承BaseLinqXmlFileInfo,只需要设置protected类型的变量mPathName,mFileName,然后重写抽象方法即可实现XML文档的读取操作。
PS:能力有限,有不对之处请指正,谢谢。
1 using System; 2 using System.IO; 3 using System.Xml.Linq; 4 5 namespace Common 6 { 7 public abstract class BaseLinqXmlFileInfo 8 { 9 protected string mPathName; 10 11 protected string mFileName; 12 13 protected virtual string PathName 14 { 15 get { return mPathName; } 16 set { mPathName = value; } 17 } 18 19 protected virtual string FileName 20 { 21 get { return mFileName; } 22 set { mFileName = value; } 23 } 24 25 protected virtual string FilePathName 26 { 27 get 28 { 29 return Path.Combine(PathName, FileName); 30 } 31 } 32 33 public virtual bool Load() 34 { 35 bool result = false; 36 try 37 { 38 string filePathName = this.FilePathName; 39 if (File.Exists(filePathName)) 40 { 41 this.LoadDocument(filePathName); 42 result = true; 43 } 44 } 45 catch(Exception ex) 46 { 47 //异常信息输出 48 } 49 return result; 50 } 51 52 public virtual bool Save() 53 { 54 bool result = false; 55 try 56 { 57 58 string pathName = this.PathName; 59 if (!Directory.Exists(pathName)) 60 { 61 Directory.CreateDirectory(PathName); 62 } 63 string tempFileName = "~" + FileName; 64 string tempfilePathName = Path.Combine(pathName, tempFileName); 65 this.SaveDocument(tempfilePathName); 66 string filePathName = Path.Combine(PathName, FileName); 67 if (File.Exists(filePathName)) 68 { 69 FileAttributes att = File.GetAttributes(filePathName); 70 if((att & FileAttributes.ReadOnly)== FileAttributes.ReadOnly) 71 { 72 File.SetAttributes(filePathName, att & ~FileAttributes.ReadOnly); 73 } 74 } 75 File.Copy(tempfilePathName, filePathName, true); 76 if (File.Exists(tempfilePathName)) 77 { 78 File.Delete(tempfilePathName); 79 } 80 result = true; 81 } 82 catch (Exception ex) 83 { 84 //异常信息输出 85 } 86 return result; 87 } 88 89 private void LoadDocument(string fileName) 90 { 91 try 92 { 93 XDocument doc = XDocument.Load(fileName); 94 this.ReadXml(doc); 95 } 96 catch(Exception ex) 97 { 98 //异常信息输出 99 } 100 } 101 102 private void SaveDocument(string fileName) 103 { 104 try 105 { 106 XDocument doc = new XDocument(); 107 this.WriteXml(doc); 108 doc.Save(fileName); 109 } 110 catch(Exception ex) 111 { 112 //异常信息输出 113 } 114 } 115 116 private void ReadXml(XDocument doc) 117 { 118 XElement root = doc.Root; 119 this.ReadXml(root); 120 } 121 122 private void WriteXml(XDocument doc) 123 { 124 XElement root = new XElement("root"); 125 doc.Add(root); 126 this.WriteXml(root); 127 } 128 129 protected abstract void ReadXml(XElement node); 130 131 protected abstract void WriteXml(XElement node); 132 } 133 134 public static class XMLSerializeExtensionClass 135 { 136 public static void Write(this XElement node,string name,string value) 137 { 138 node.SetAttributeValue(name, value); 139 } 140 141 public static string ReadString(this XElement node, string name, string defaultValue) 142 { 143 XAttribute att = node.Attribute(name); 144 return att != null ? att.Value : defaultValue; 145 } 146 147 public static void Write(this XElement node,string name,long value) 148 { 149 node.SetAttributeValue(name, value); 150 } 151 152 public static long ReadLong(this XElement node,string name,long defaultValue) 153 { 154 XAttribute att = node.Attribute(name); 155 return att != null ? Convert.ToInt64(att.Value) : defaultValue; 156 } 157 158 public static void Write(this XElement node,string name,decimal value) 159 { 160 node.SetAttributeValue(name, value); 161 } 162 163 public static decimal ReadDecimal(this XElement node,string name,decimal defaultValue) 164 { 165 XAttribute att = node.Attribute(name); 166 return att != null ? Convert.ToDecimal(att.Value) : defaultValue; 167 } 168 169 public static void Write(this XElement node ,string name,DateTime value) 170 { 171 node.SetAttributeValue(name, value); 172 } 173 174 public static DateTime ReadDateTime(this XElement node,string name,DateTime defaultValue) 175 { 176 XAttribute att = node.Attribute(name); 177 return att != null ? Convert.ToDateTime(att.Value) : defaultValue; 178 } 179 180 public static void Write(this XElement node,string name,int value) 181 { 182 node.SetAttributeValue(name, value); 183 } 184 185 public static int ReadInt(this XElement node,string name,int defaultValue) 186 { 187 XAttribute att = node.Attribute(name); 188 return att != null ? Convert.ToInt32(att.Value) : defaultValue; 189 } 190 191 public static void Write(this XElement node, string name,bool value) 192 { 193 node.SetAttributeValue(name, value); 194 } 195 196 public static bool ReadBoolean(this XElement node, string name, bool defaultValue) 197 { 198 XAttribute att = node.Attribute(name); 199 return att != null ? Convert.ToBoolean(att.Value) : defaultValue; 200 } 201 } 202 }
以上是关于C# XMl读写配置文件的主要内容,如果未能解决你的问题,请参考以下文章