Проверяет, используется ли файл, но сохраняет владение vb.net - PullRequest
0 голосов
/ 04 июня 2019

Я хочу проверить, используется ли файл.Был предоставлен следующий код, и он работает!Теперь проблема в том, что если я хочу открыть текстовый файл через блокнот, мое приложение 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

1 Ответ

0 голосов
/ 04 июня 2019

File.Open() открывает FileStream. Если вы не закроете его, следующая попытка открыть тот же поток приведет к IOException. Поместите его в блок Using, как рекомендует JayV, и он должен работать нормально:

    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 и закрыть его там.

...