• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 247
  • Last Modified:

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

Hi

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

Luis
' 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"
NewElement.Attributes.Append(NewAtribute)
 
NewAtribute = MyDoc.CreateAttribute("Value2")
NewAtribute.Value = "2"
NewElement.Attributes.Append(NewAtribute)
 
MyDoc.DocumentElement.AppendChild(NewElement)
 
...
... 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.Save(Writer) 
 
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
 
Next
 
MyDoc = Nothing
 
End Sub

Open in new window

0
luiggye
Asked:
luiggye
  • 2
1 Solution
 
Fernando SotoCommented:
Hi luiggye;

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

MyDoc.Save(Writer)
' Close the file
Writer.Close()
MyDoc = Nothing

Fernando
0
 
rachitkohliCommented:
Try using with stream


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

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now