可能重複:
Is there a way to check if a file is in use?C#問題與打開的文件
有沒有辦法關閉在C#中的文件?
if(File.Exists(TEMP_FILENAME))
File.Delete(TEMP_FILENAME);
上述代碼抱怨文件已被其他進程使用。
有沒有辦法檢查VS 2008中打開的文件句柄?
可能重複:
Is there a way to check if a file is in use?C#問題與打開的文件
有沒有辦法關閉在C#中的文件?
if(File.Exists(TEMP_FILENAME))
File.Delete(TEMP_FILENAME);
上述代碼抱怨文件已被其他進程使用。
有沒有辦法檢查VS 2008中打開的文件句柄?
關閉您的應用程序中使用該文件的任何流。
如果錯誤是由於另一個正在運行的應用程序引起的,最好只嘗試操作並處理失敗。如果您檢查,然後嘗試執行操作,您創建競爭條件。如果刪除失敗(無論是因爲正在使用的文件還是權限),那麼只需處理該問題即可。
我有在VS2008中發生這種情況時運行一個程序,一旦我打開一個文件,停止執行,然後再次運行,並試圖對文件做任何事情。當發生這種情況時,我發現修復它的唯一方法是關閉VS並重新打開它,或者殺死* .vshost.exe進程以釋放文件。我從來沒有真正考慮過它爲什麼會發生,但我認爲這是因爲從VS運行爲應用程序的實際進程是* .vshost.exe文件,當您結束程序的執行時它不會關閉。
另外,爲防止這種情況發生,請務必確保正確關閉文件流或使用using
塊。確保在通過VS結束執行之前執行代碼的這部分內容。
如果不是發生了什麼情況,請檢查mkus提供的答案,瞭解如何查看其他應用程序是否鎖定了您的文件。
是的,這也發生在我身上......通常我只是重新啓動VS.感謝您停止vshost.exe進程的提示,我會在下次發生時嘗試。 – 2010-01-20 19:49:56
我通常在那個時候重新啓動VS,通常也是我的電腦,因爲我通常每週只重新啓動一次,現在是重新啓動並獲取新鮮咖啡的合適時機......如果我在火車正中當它發生時,它的速度要快得多,只要殺死vshost進程並繼續我所做的,而不是因爲五分鐘等待所有的東西重新出現而出軌。 – 2010-01-20 20:02:13
看看你是否可以獲得安全處理。這又是非管理的東西。如果您可以獲得安全處理,則可能意味着該文件可以免費使用。
請參閱本link
你能張貼在這裏爲您帶來的代碼,可能會有線索,一個更大的問題。 – gingerbreadboy 2010-01-20 19:21:07