我创建了一个ping应用程序,其中包含ping到URL的服务。 URL列表存储在XML文件中 当我在服务运行时尝试向我的XML添加新站点时,我的应用程序崩溃了。
VS2010说我的文件正在被其他一些进程使用,但我确信一切都很好。我在添加时没有使用XML。
但我想使用XmlReader& XmlWriter同时崩溃的地方 我将用LINQ to 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");
}
}
答案 0 :(得分:2)
您的读者正在阻止写入,因为它位于使用块中。我建议使用Load方法将XmlDocument对象与uri一起使用,而不是创建自己的读者。然后你也可以将初始化与写作操作分开。
答案 1 :(得分:0)
显式关闭XMLReader。
using (XmlReader reader = XmlReader.Create("file.xml"))
{
while (reader.Read())
{
...
}
reader.Close();
}