我正在编写一个框架的代码,用于打开自定义类型的文件。为了防止其他应用程序打开该文件,我使用文件流创建一个锁文件,并保持该文件流处于打开状态。
这似乎能够阻止另一个应用程序打开该文件(因为在文件打开代码中,它无法重新创建锁流),但如果文件位于网络共享上,并且网络断开,则原始应用程序也无法再访问该文件。
获取锁流的代码如下:
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告诉我有一个进程无法访问该文件,因为它正在被其他进程打开(我认为不应该发生这种情况)。
希望这有些意义,我已经搜索过了,但没有找到关于这个特定场景的任何信息,所以我想看看这里是否有人有类似的经验。
谢谢。