Why a xml file remain being used by a process after loaded with MyDoc.Load method ??


I have a VB NET application.

In the main form, I am creating an xml file, and after that, I am calling a child form that tries to read it xml file, and proccess it.

The first time that I run it process, all is OK, in other words, the xml file is successfully created, after that, the other form is called, and them, the xml file is successfully acceded.
The next times, the xml file is created ok with new data, but when I call the child form, I can not open the xml file, and I receive the following error:

The process cannot access the file 'C:\Documents and Settings\LUIS\Local Settings\MyCompany\Cache\MyFile.xml' because it is being used by another process.

The only way I can release it, is to exit of my application.

What I am doing wrong?

Why the xml file remain being used by a process ?

Please see the attached example.

Thanks in advance

' This is the sub in the main form
Dim MyDoc As New XmlDocument()
Dim NewElement As XmlElement = Nothing
Dim NewAtribute As XmlAttribute = Nothing
MyDoc.LoadXml("<XmlData></XmlData>") ' I allway will create the file
NewElement = MyDoc.CreateElement("Headers")
NewAtribute = MyDoc.CreateAttribute("Value1")
NewAtribute.Value = "1"
NewAtribute = MyDoc.CreateAttribute("Value2")
NewAtribute.Value = "2"
... More rows are inserted as needed
Dim UserPath As String = Path.GetFullPath(Path.Combine (Environment.GetFolderPath   (Environment.SpecialFolder.LocalApplicationData), "..\\MyCompany\Cache"))
Dim Writer As XmlTextWriter = New XmlTextWriter(UserPath & "\MyFile.xml", Nothing)
Writer.Formatting = Formatting.Indented
' This allways write OK, the first time, and the next times....
MyDoc = Nothing
ChildForm.ShowDialog() ' Here I call the child form
Following the child form:
Private Sub ChildForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ListNodes_Headers As XmlNodeList = Nothing
Dim Node As XmlNode = Nothing
Dim MyDoc As New XmlDocument()
Dim UserPath As String = Path.GetFullPath(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "..\\MyCompany\Cache"))
' The following, fails after the first time
MyDoc.Load(UserPath & "\MyFile.xml") ' Here I receive the error
ListNodes_Headers = MyDoc.SelectNodes("//Headers")
For Each Node In ListNodes_Headers
    Dim Value1 as string = Node.Attributes("Value1").Value
    Dim Value2 as string = Node.Attributes("Value2").Value
MyDoc = Nothing
End Sub

Open in new window

Who is Participating?
Fernando SotoConnect With a Mentor RetiredCommented:
Hi luiggye;

You need to release the file resources after using it. see sample code.

' Close the file
MyDoc = Nothing

Try using with stream

        Dim fs As IO.FileStream
        fs = New IO.FileStream("FILE_PATH", IO.FileMode.Open, IO.FileAccess.Read)
        MyDoc .Load(fs)
luiggyeAuthor Commented:
Thanks Fernando, It worked...
Fernando SotoRetiredCommented:
Not a problem, glad I was able to help. ;=)
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.