title: Close instance of a XDOCUMENT
body: <p>I'm getting this error </p>
  
  <blockquote>
    <p><em>The process cannot access the file 'C:\test\Person.xml' because it is
    being used by another process. IOException was UnHandled</em></p>
  </blockquote>
  
  <p>How do I close the instance of the xml file after saving the content in the file?</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.IO;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  using System.Xml;
  using System.Xml.Linq;
  
  namespace XmlAddDelRecord
  {
      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
              LoadDatagrid();
          }
  
          private void LoadDatagrid()
          {
              try
              {
                  XmlReader xmlFile;
                  xmlFile = XmlReader.Create(filePath, new XmlReaderSettings());
                  DataSet ds = new DataSet();
                  ds.ReadXml(xmlFile);
                  dataGridView1.DataSource = ds.Tables[0];
              }
              catch (Exception ex)
              {
                  MessageBox.Show(ex.ToString());
              } 
          }
  
          private const string filePath = @"C:\test\Person.xml";
  
          private void button1_Click(object sender, EventArgs e)
          {
              var xmlDoc = new XmlDocument();
  
              xmlDoc.Load(filePath);
  
              var subRoot = xmlDoc.CreateElement("Customer");
              subRoot.SetAttribute("id", textBox6.Text.Trim());
  
              var firstName = xmlDoc.CreateElement("FirstName");
              var xmlTextUserName = xmlDoc.CreateTextNode(textBox1.Text.Trim());
              firstName.AppendChild(xmlTextUserName);
              subRoot.AppendChild(firstName);
              if (xmlDoc.DocumentElement != null) xmlDoc.DocumentElement.AppendChild(subRoot);
  
              var email = xmlDoc.CreateElement("LastName");
              var xmlTextEmail = xmlDoc.CreateTextNode(textBox2.Text.Trim());
              email.AppendChild(xmlTextEmail);
              subRoot.AppendChild(email);
              if (xmlDoc.DocumentElement != null) xmlDoc.DocumentElement.AppendChild(subRoot);
  
              var mobile = xmlDoc.CreateElement("Mobile");
              var xmlTextMobile = xmlDoc.CreateTextNode(textBox3.Text.Trim());
  
              mobile.AppendChild(xmlTextMobile);
              subRoot.AppendChild(mobile);
  
              if (xmlDoc.DocumentElement != null) xmlDoc.DocumentElement.AppendChild(subRoot);
  
              var address = xmlDoc.CreateElement("Address");
              var xmlTextAddress = xmlDoc.CreateTextNode(textBox4.Text.Trim());
              address.AppendChild(xmlTextAddress);
              subRoot.AppendChild(address);
              if (xmlDoc.DocumentElement != null) xmlDoc.DocumentElement.AppendChild(subRoot);
  
              var country= xmlDoc.CreateElement("Country");
              var xmlTextCountry = xmlDoc.CreateTextNode(textBox5.Text.Trim());
              country.AppendChild(xmlTextCountry);
              subRoot.AppendChild(country);
  
              if (xmlDoc.DocumentElement != null) xmlDoc.DocumentElement.AppendChild(subRoot);
  
              xmlDoc.Save(filePath);
              if (File.Exists(filePath)) return;
  
              var textWritter = new XmlTextWriter(filePath, null);
              textWritter.WriteStartDocument();
              textWritter.WriteStartElement("CustomerRecord");
              textWritter.WriteEndElement();
  
              textWritter.Close();
          }
  
          //Search record if not found then add a record
          private void button3_Click(object sender, EventArgs e)
          {
              XDocument doc = XDocument.Load(filePath);
  
              string id = textBox6.Text;
              XElement element = doc.Descendants("Customer").FirstOrDefault(p =&gt; p.Attribute("id").Value == id);
  
              if (element != null)
              {
                  //found
                  textBox6.Text = textBox6.Text;
                  textBox1.Text = (string)element.Element("FirstName");
                  textBox2.Text = (string)element.Element("LastName"); 
                  textBox3.Text = (string)element.Element("Mobile");
                  textBox4.Text = (string)element.Element("Address");
                  textBox5.Text = (string)element.Element("Country");
              }
              else
              {
                  //Not found
                  //To add a customer
                  var FirstName = textBox1.Text;
                  var LastName = textBox2.Text;
                  var Mobile = textBox3.Text;
                  var Address = textBox4.Text;
                  var Country = textBox5.Text;
  
                  var ele = new XElement("Customer");
                  ele.SetAttributeValue("id", id);
                  ele.Add(new XElement("FirstName", FirstName));
                  ele.Add(new XElement("LastName", LastName));
                  ele.Add(new XElement("Mobile", Mobile));
                  ele.Add(new XElement("Address", Address));
                  ele.Add(new XElement("Country", Country));
  
                  if (doc.Root != null) doc.Root.Add(ele);
  
                  doc.Save(filePath, SaveOptions.None);
  
                  dataGridView1.Refresh();
                  dataGridView1.Parent.Refresh();
              }
          }
  
          //To Remove Record
          private void button2_Click(object sender, EventArgs e)
          {
              XDocument doc = XDocument.Load(filePath);
  
              var q = from node in doc.Descendants("Customer")
                      let attr = node.Attribute("id")
                      where attr != null &amp;&amp; attr.Value == textBox6.Text 
                      select node;
  
              q.ToList().ForEach(x =&gt; x.Remove());
              doc.Save(filePath, SaveOptions.None);
  
              dataGridView1.Refresh();
              dataGridView1.Parent.Refresh();
          }
      }
  }
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/MakSY.jpg" alt="enter image description here"></p>