2011-07-20 30 views
0

我有一個小應用程序應該讀取用戶上傳的XML文檔。如果文件沒有合適的節點,文件將被刪除,並通知用戶。試圖刪除XML文件會拋出「進程無法訪問文件...」錯誤

但是,當我嘗試刪除它時,文件始終被鎖定,無論是在代碼中還是通過Windows資源管理器。它保持鎖定,直到我在IE中刷新頁面。

myDoc.Load(FileUpload2.FileContent); 
string XMLpath = Server.MapPath(ConfigurationSettings.AppSettings["PDFLocation"]) + FileUpload2.FileName; 
myDoc.Save(XMLpath); 
file = new FileInfo(XMLpath); 

//here I check if the file is valid. If not, delete 

file.Delete(); //This is where it throws the "cannot access the file" error 

錯誤的全文:

The process cannot access the file 'C:\project\files\file.xml' because it is being used by another process. 

我試圖把在FileUpload2.FileContent.Dispose();FileUpload2.Dispose(); DELETE語句之前,但沒有運氣。

如何釋放要刪除的文件?

回答

2

您不應該將XML文件保存到磁盤,直到您知道它是有效的。

要回答你的問題,你在開頭的FileStream處留下了一個被忽略的代碼。
您需要Dispose()它,最好是通過使用using聲明。

2

保存後需要關閉文件。如果您的應用程序打開了文件,則無法刪除該文件。

+0

好的,真棒。我怎麼做? – Jimmy

+0

@Jimmy - 你的代碼很難說,但是如果你使用[Create Method]打開XML文件(http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create.aspx ),然後使用[Close Method](http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.close.aspx)。如果你只是將一個字符串傳入XMLDocument.Load方法,那麼不要。相反,使用IOStream自己打開文件並將該流傳遞給XMLDocument.Load函數。你需要一個例子嗎? – Icemanind

+0

問題是檢查文件的代碼不是我自己的。我只是以爲這是我的錯,這不起作用。原來,問題出在該代碼中。文件流被打開了。我修補它,它像一個魅力。 – Jimmy

0

保存yout文件後,您需要關閉以及刷新內存。

1

我不知道是什麼類型的myDoc的......但如果有一個方法「Close」或「Dispose」隨後致電,試圖刪除之前...

編輯: 如果這樣做沒有這樣的方法,那麼myDoc = null;可以幫助。

相關問題