读取后关闭XML文件,可以将其删除

时间:2014-05-16 13:47:35

标签: vb.net visual-studio-2012

将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

任何有关我出错的地方的帮助都会得到很好的接受。

由于

4 个答案:

答案 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