2014-05-16 98 views
0

將XML文件加載到.XMLDocument中後刪除XML文件時出現問題。閱讀後關閉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

您是否使用xmlreader讀取文檔?如果是這樣 - 在嘗試刪除xmlDoc之前調用xmlreader.close() – DNKROZ

+0

對不起,我正在使用XMLdocument而不是讀者,所以我不能在最後關閉它! – user3644863

回答

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中(在處置企圖),那麼它應該已經打開了文件,它可以然後被刪除。

我沒有測試的代碼,但給它一個去

+0

這仍然給使用中的文件錯誤! :) – user3644863

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 

第二種方法的缺點是我的例子沒有考慮任何其他編碼,但它應該讓你過去當前的問題。處理各種編碼選項是一個完全不同的問題。

+0

可能感謝您的迴應,這會在編譯時引發異常:錯誤'使用''System.Xml.XmlDocument'類型的操作數必須實現'System.IDisposable'這說實話我甚至不確定我現在明白這意味着什麼。 – user3644863

+0

第二個版本依然會給出正在使用的文件錯誤:) – user3644863

+0

這個文件是否可能被你以外的進程使用?或者也許代碼之前的代碼? – tgolisch

0

感謝您提供的所有幫助,它被streamreader保留爲開放狀態,我並不認爲這是導致問題的原因,因爲我認爲它在XMLDocument使用該文件時會導致錯誤。

相關問題