我正在使用XDocument加载和保存配置文件.大部分时间它都能正常工作,但有些情况(看似随机)会在最后一个标记之后附加额外信息.这是发生了什么的要点.
配置文件预运行:
<?xml version="1.0" encoding="us-ascii"?>
<local>
</local>
Run Code Online (Sandbox Code Playgroud)
码:
XDocument config = new XDocument();
config = XDocument.Load(new FileStream(@"c:\foo.xml", FileMode.Open, FileAccess.Read));
XElement fileEle = config.Root.Element("files");
XElement statsEle = new XElement("stats");
statsEle.Add(new XElement("one", "two"));
statsEle.Add(new XElement("three", "four"));
.
.
.
fileEle.Add(statsEle);
config.Save(new FileStream(@"c:\foo.xml", FileMode.Create, FileAccess.Write), SaveOptions.None);
Run Code Online (Sandbox Code Playgroud)
配置文件运行后:
<?xml version="1.0" encoding="us-ascii"?>
<local>
<files>
<one>two</one>
<three>four</three>
</files>
</local>s>
</local>
Run Code Online (Sandbox Code Playgroud)
有什么建议?不知道为什么要添加额外的字符.有时它是额外的标签,有时它是不同的字符,有时它可以正常工作.我尝试使用不同的方法(XMLReader等)加载/保存,以不同的方式添加XML标记.在X运行之后它们都产生相同的错误.谢谢您的帮助!
你有两个FileStream同时打开同一个文件...一个用于阅读foo.xml,一个用于覆盖它.这似乎很成问题.
我建议:
FileStream立即处理读取XmlDocument:using (FileStream fs = new FileStream(@"C:\foo.xml", FileMode.Open, FileAccess.Read))
{
config.Load(fs);
}
Run Code Online (Sandbox Code Playgroud)
FileMode.Truncate在写入时使用,FileStream以便在开始写入文件之前将文件截断为0字节.| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |