我正在编写一些代码作为打开文件的框架的一部分。该文件是自定义类型,不应该由我的应用程序的多个实例打开。要停止打开多个文件,我使用文件流来创建锁定文件,然后保持所述文件流打开。当网络丢失时在网络上使用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