在XML文件崩溃中添加节点
本文关键字:添加 节点 崩溃 XML 文件 | 更新日期: 2023-09-27 18:12:39
我创建了一个ping应用程序,其中包含一个ping到url的服务。url列表存储在XML文件中。
当我试图在服务运行时向XML添加新站点时,应用程序崩溃了。
VS2010说我的文件正在被其他进程使用,但我确信一切都很好。我的服务在添加时没有使用XML。
但是我猜使用XmlReader &XmlWriter同时也是它崩溃的地方。
我会用LINQ重写我的代码到XML,但我想知道是否有可能使用XmlReader &;同时使用XmlWriter ?
private void saveSites(Site newSite)
{
XmlDocument XDoc = new XmlDocument();
bool fileExists = true;
if (File.Exists("c:''temp''sites.xml") == false)
{
createXML();
fileExists = false;
}
using (XmlReader XReader = XmlReader.Create("c:''temp''sites.xml"))
{
XDoc.Load(XReader);
if (fileExists == true)
{
XmlNode SiteNode = XDoc.CreateNode(XmlNodeType.Element, "site", "");
XmlNode URLNode = XDoc.CreateNode(XmlNodeType.Element, "url", "");
URLNode.InnerText = newSite.URL;
XmlNode EmailNode = XDoc.CreateNode(XmlNodeType.Element, "email", "");
EmailNode.InnerText = newSite.Email;
SiteNode.AppendChild(URLNode);
SiteNode.AppendChild(EmailNode);
XDoc.DocumentElement.AppendChild(SiteNode);
}
else
{
foreach (Site site in sites)
{
XmlNode SiteNode = XDoc.CreateNode(XmlNodeType.Element, "site", "");
XmlNode URLNode = XDoc.CreateNode(XmlNodeType.Element, "url", "");
URLNode.InnerText= site.URL;
XmlNode EmailNode = XDoc.CreateNode(XmlNodeType.Element, "email", "");
EmailNode.InnerText = site.Email;
SiteNode.AppendChild(URLNode);
SiteNode.AppendChild(EmailNode);
XDoc.DocumentElement.AppendChild(SiteNode);
}
}
XDoc.Save("c:''temp''sites.xml");
}
}
您的阅读器正在阻塞写入,因为它在using块中。我建议使用带有uri的XmlDocument对象的Load方法,而不是创建您自己的阅读器。然后,您还可以将初始化操作与写入操作分开。
明确地关闭XMLReader。
using (XmlReader reader = XmlReader.Create("file.xml"))
{
while (reader.Read())
{
...
}
reader.Close();
}