2016-03-28 189 views
0

我想检查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而不是功能。

此致敬礼。

+0

你为什么喜欢Sub over Function?如果你想检查文件是否被打开,函数会更好,因为你可以使它返回True或False,因此你可以在'If'语句中检查它。 –

+0

我建议你将返回类型修改为'Boolean',并在函数的最后一行返回'True',并在'Catch'块中返回False。我也认为'FileStream'会比'StreamWriter'更好。 –

+0

@VisualVincent您可以发布您建议的代码吗? – Markowitz

回答

0

若要使用此代码,您需要使用的功能,如下面的例子:

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 

在这个例子中工作。

+0

这并没有告诉他它是否被打开,实际上它什么都不做,除非你像'If'语句那样检查它。 –

+0

我也看到了,并在几分钟前做了编辑! – Dustin

1

您应该将退货类型更改为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 

请注意,无论是功能只会告诉你,如果该文件是可访问的,它可能是一个进程打开它不锁定它。

相关问题