2011-10-27 18 views
0

URLにpingするサービスを持つpingアプリケーションを作成しました。 URLのリストは、XMLファイルに格納されます。
サービスの実行中に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"); 
    } 
} 

答えて

2

あなたのリーダーは、使用ブロック内にあるため、書き込みがブロックされています。独自のリーダーを作成する代わりに、UmlでXmlDocumentオブジェクトのLoadメソッドを使用することをお勧めします。次に、initilisationと書き込み操作を分離することもできます。

+0

URIを挿入できませんでしたが、文字列を使用していましたが、うまくいきました。ありがとうございます! –

0

XMLReaderを明示的に閉じます。

関連する問題