gpt4 book ai didi

.net - 网络掉线时在网络上使用 FileStream

转载 作者:行者123 更新时间:2023-12-02 02:17:21 27 4
gpt4 key购买 nike

我正在编写一些代码作为打开文件框架的一部分。该文件属于自定义类型,不应由我的应用程序的多个实例打开。为了停止打开多个文件,我使用文件流创建一个锁定文件,然后保持所述文件流打开。

这似乎可以防止我的应用程序的另一个实例打开文件(因为它无法在文件打开代码中重新创建锁定流)但是如果文件在网络共享上并且网络掉线则原始文件应用程序也无法再访问该文件。

获取锁流的代码如下:

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 告诉我进程不能在另一个进程中打开文件时访问该文件(我认为这不应该发生)。

我希望这是有道理的,我环顾四周,但没有发现任何关于这种特殊情况的信息,所以我想看看这里是否有人有过类似的经历。

干杯。

最佳答案

Answer by Dracanus :


所以我花了很多时间假设这个问题是一些深沉、黑暗、可怕的 .Net 问题,而实际上修复比我想象的要容易一些。我将初始流创建更改为使用 FileShare.Read。在仔细检查 FileShare 枚举后,我发现 FileShare.None 也拒绝对创建它的进程开放访问(

Declines sharing of the current file. Any request to open the file (by this process or another process) will fail until the file is closed.

因此,通过将其更改为 FileShare.Read,我可以在重新建立网络连接时重新获取锁,然后在删除实际文件之前正确处理它。

我希望这不是太多乱码并且对其他人有用。与我的大多数编程问题一样,这个问题比我预期的要简单,并且让我偏离了它的轨道:)

关于.net - 网络掉线时在网络上使用 FileStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9874116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com