有没有一种方法可以检查文件是否已经打开?
我想检查C:\ Data.xlsb是否已经打开。有没有一种方法可以检查文件是否已经打开?
我有下面的代码从这里How to tell if a certain Excel file is open using VB.NET?
Public Shared Function OpenUnlockedFile(ByVal path As String) As StreamWriter
Dim sw As StreamWriter = nothing
Try
sw = New StreamWriter(path)
Catch ex As IOException When System.Runtime.InteropServices.Marshal.GetLastWin32Error() = 32
REM locked, return nothing
End Try
Return sw
End Function
但我不知道如何使用上面的代码。
我更喜欢sub而不是功能。
此致敬礼。
若要使用此代码,您需要使用的功能,如下面的例子:
Imports System.IO
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If OpenUnlockedFile("C:\Data.xlsb") Is Nothing Then
MessageBox.Show("File is locked")
End If
End Sub
Public Shared Function OpenUnlockedFile(ByVal path As String) As StreamWriter
Dim sw As StreamWriter = Nothing
Try
sw = New StreamWriter(path)
Catch ex As IOException When System.Runtime.InteropServices.Marshal.GetLastWin32Error() = 32
REM locked, return nothing
End Try
Return sw
End Function
End Class
功能,OpenUnlockedFile(“C:\ Data.xlsb”)运行时,只要按下Button1的(在此例)。如果该函数运行并且它返回Nothing,那么您将知道该文件已被锁定。
请注意,您还需要
Imports System.IO
在这个例子中工作。
这并没有告诉他它是否被打开,实际上它什么都不做,除非你像'If'语句那样检查它。 –
我也看到了,并在几分钟前做了编辑! – Dustin
您应该将退货类型更改为Boolean
以更好地满足您的需求,并且也可以从StreamWriter
切换到FileStream
。这是因为在文章中,您链接了OP想要写入的文件,我认为您不需要(或者至少不使用纯文本StreamWriter
)。
Public Shared Function IsFileAvailable(ByVal path As String) As Boolean
Try
Dim fs As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None)
fs.Close()
Catch ex As IOException When System.Runtime.InteropServices.Marshal.GetLastWin32Error() = 32
Return False
End Try
Return True
End Function
然后你只想用这样的:
If IsFileAvailable("C:\Data.xlsb") = True Then
'File is not locked, do what you like here.
Else
MessageBox.Show("The file is locked!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
请注意,无论是功能只会告诉你,如果该文件是可访问的,它可能是一个进程打开它不锁定它。
你为什么喜欢Sub over Function?如果你想检查文件是否被打开,函数会更好,因为你可以使它返回True或False,因此你可以在'If'语句中检查它。 –
我建议你将返回类型修改为'Boolean',并在函数的最后一行返回'True',并在'Catch'块中返回False。我也认为'FileStream'会比'StreamWriter'更好。 –
@VisualVincent您可以发布您建议的代码吗? – Markowitz