luiggye
asked on
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\M yFile.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
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\M
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
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks Fernando, It worked...
Not a problem, glad I was able to help. ;=)
Dim fs As IO.FileStream
fs = New IO.FileStream("FILE_PATH",
MyDoc .Load(fs)
fs.Close()