【问题标题】:Checks if file is in use but the retains possession vb.net检查文件是否正在使用但保留所有权 vb.net
【发布时间】:2019-06-04 19:53:55
【问题描述】:

我想测试一个文件是否正在使用中。提供了如下代码,它可以工作!现在的问题是,如果我想通过记事本打开文本文件,我的 vb.net 应用程序刚刚检查了文件是否正在使用中,它保留了对它的所有权。我如何测试文件是否正在使用但也不占有它。在测试文件是否正在使用后立即发布文件也适用于我。我也试过插入 FileClose(1) 但没有用?

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Try
            System.IO.File.Open("C:\test.txt", IO.FileMode.Open,
            IO.FileAccess.Read, IO.FileShare.None)
            MsgBox("In Use")
        Catch ex As Exception
            MsgBox("Not in use")
        End Try
    End Sub
End Class

【问题讨论】:

  • 无法看到这是如何重复的,因为链接显示正在创建一个文件。我不是在创建,而是在尝试检查已经创建的东西
  • @ABANDONDACOUNT 您是否尝试将File.Open 调用包装在Using 块中?
  • 因为这不是我的职业,我必须进行逆向工程,这对我来说意义不大。我假设带有 file.stream 的示例是要走的路,但是由于某种原因甚至无法产生正确的结果,更不用说为我关闭文件了

标签: vb.net file-access


【解决方案1】:

File.Open() 打开一个FileStream。如果您不关闭它,下一次尝试打开同一流将导致IOException。按照 JayV 的建议,将它放在 Using 块中,它应该可以正常工作:

    Try
        Using System.IO.File.Open("C:\test.txt", IO.FileMode.Open,
              IO.FileAccess.Read, IO.FileShare.None)
            MsgBox("In Use")
        End Using
        MsgBox("Disposed, not in use")
    Catch ex As Exception
        MsgBox(ex.StackTrace)
    End Try

这将打开FileStream,确认它没有被其他人使用,然后关闭它,即使Exception 被抛出。 如果您要使用显式处置(即FileStream.Close()),则必须将Finally 块添加到您的Try/Catch 并在那里关闭它。

【讨论】:

  • 我不知道在代码中的什么位置我完全不熟悉 Using 块
  • 这与您分享的内容几乎相同,但添加了使用。我会在一分钟内编辑。
  • @MarianoLuisVilla 我认为MsgBox("In Use") 需要在Using 块内。当您的代码显示MsgBox 时,文件锁定将被释放。
  • @MarianoLuisVilla 我尝试了你的编辑,但即使我关闭了它,它还是一直说文件正在使用?我将重新启动计算机,希望它可能只是卡在内存问题中
  • 在重新启动并清空我的 %Temp% 文件夹后结果也没有任何变化(垃圾似乎经常堆积并导致内存污染)
猜你喜欢
  • 2022-01-20
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多