将XML文件加载到.XMLDocument后,我在删除XML文件时遇到问题。
我的代码解析特定节点的XML文件,并将它们的值分配给变量。
完成后,代码将根据XML文件中的值处理数据。
直到最后,当我尝试删除XML文件时仍然可以正常工作,因为它仍处于打开状态,然后我收到错误"该进程无法访问该文件,因为它正被另一个进程使用"我猜是XMLDocument阅读器。
以下是XML处理代码的一部分 - 这很好用。
`Dim xmlDoc As XmlDocument = New XmlDocument()
xmlDoc.Load(strFileName)
intPassed = xmlDoc.SelectSingleNode("//CalibrationPassed").InnerText
boolCheck = xmlDoc.SelectSingleNode("//ChecksComplete").InnerText
intCertRequired = xmlDoc.SelectSingleNode("//Schedule").InnerText
Console.WriteLine("Calibration Passed: " & intPassed)
Console.WriteLine("Checks Complete:" & boolCheck)
Console.WriteLine("Schedule: " & intCertRequired)
strFirstName = xmlDoc.SelectSingleNode("//FirstName").InnerText
strEMail = xmlDoc.SelectSingleNode("//Email").InnerText
strCusEmail = xmlDoc.SelectSingleNode("//CustomerEmail").InnerText
strCompanyName = xmlDoc.SelectSingleNode("//CompanyName").InnerText
strContractNumber = xmlDoc.SelectSingleNode("//ContractNo").InnerText
Console.WriteLine("First name: " & strFirstName)
Console.WriteLine("Email: " & strEMail)
Console.WriteLine("Customer EMail: " & strCusEmail)
Console.WriteLine("Company name: " & strCompanyName)
Console.WriteLine("Contract no: " & strContractNumber)
Console.WriteLine("XML Parsing Complete")
` 用于删除文件的代码是:
If System.IO.File.Exists(strFileName) = True Then
System.IO.File.Delete(strFileName)
Console.WriteLine("Deleted XML file")
End If
任何有关我出错的地方的帮助都会得到很好的接受。
由于
答案 0 :(得分:1)
XmlDocument.Load
在引擎盖下使用了一个流阅读器。避免这种情况有两种策略:
1)使用块将自动并及时关闭/处理您的流
Using xmlDoc As XmlDocument = New XmlDocument()
xmlDoc.Load(strFileName)
'all of your copying stuff
End Using
'now delete your file
2)加载XML并避免使用阅读器:
Dim strXml as string
strXml = System.IO.File.ReadAllText(strFileName)
Dim xmlDoc As XmlDocument = New XmlDocument()
xmlDoc.LoadXml(strXml)
'and then the rest of your code
第二种方法的缺点是我的示例没有考虑任何其他编码,但它应该让你超越当前的问题。处理各种编码选项是完全不同的事情。
答案 1 :(得分:0)
如果您未使用xmlreader,请尝试以下操作:
Dim xmlDoc = New XmlDocument()
doc.Load(strFileName)
//do all the reading stuff
Using writer = New StreamWriter(strFileName)
xmlDoc.Save(writer)
End Using
它会保存你的xmlDoc(试图处理)然后它应该解锁文件然后可以删除。
我还没有对代码进行过测试,但是还是试了一下
答案 2 :(得分:0)
感谢所有的帮助,它被streamreader保持打开状态,我认为这不是问题的原因,因为我认为当XMLDocument使用该文件时会导致错误。
答案 3 :(得分:0)
这对我有用。将引用设置为空(空)以强制进行垃圾回收。
for