我正在編寫一些代碼作爲打開文件的框架的一部分。該文件是自定義類型,不應該由我的應用程序的多個實例打開。要停止打開多個文件,我使用文件流來創建鎖定文件,然後保持所述文件流打開。當網絡丟失時在網絡上使用FileStream
這似乎在阻止我的應用程序的另一個實例打開文件(因爲它將無法在文件打開代碼中重新創建鎖定流),但是如果該文件位於網絡共享上並且網絡丟失,那麼原來的應用程序也無法再訪問該文件。
的代碼來獲取鎖流如下:
Try
' We need to keep this stream alive to prevent other applications gaining access to the lock
mLockStream = New FileStream(mLockPath, FileMode.CreateNew, FileAccess.Write, FileShare.None)
Catch ex As UnauthorizedAccessException
Catch ex As DirectoryNotFoundException
Throw
Catch ex As IOException
Throw New ProjectInUseException(My.Resources.LocalizedResources.ProjectInUseExceptionMessage, Nothing)
End Try
在此我創建鎖流第一次圓,然後,如果其他應用程序試圖創建它,它拋出一個異常,並阻止它們從進一步得到。不幸的是,正如我所說的,如果這是通過網絡完成的,然後網絡連接由於某種原因而被丟棄,那麼我不能刪除鎖定流,因爲我得到一個IOException,告訴我一個進程不能在另一個進程中打開該文件(這不應該發生,我不認爲)。
我希望這是有道理的,我環顧四周,但沒有發現任何關於這種特殊場景的內容,所以我想我會看看這裏的任何人是否有過類似的經歷。
歡呼聲。
你應該發佈你的答案*作爲答案*,而不是編輯你的題。我已經爲你做了這件事,並將*我的*答案標記爲社區wiki(所以我沒有爲它贏得聲譽)。也就是說,如果你發佈你的答案,你可以接受它,然後我會刪除我的答案(如果答案是好的/正確的/正確的,你可以在你的答案上投票)。 – casperOne 2012-03-26 17:51:11
您是否介意複製答案並選擇答案?我的回答(以你的名義)不應該在這裏擺在首位。一旦你發佈了答案,我可以刪除我的(這是你的名字)。你的答案應該是*你的*名字。 – casperOne 2013-04-10 12:32:30