如何判断某个Excel文件是否使用VB.NET打开?

时间:2010-05-26 19:05:31

标签: .net vb.net excel visual-studio-2005

我正在将我的数据集导出到excel文件,我想确保控制任何文件错误。我特别关注的一个是访问已经打开的文件。发生一般IOException,表示“进程无法访问文件'C:\ Reports \ report300.csv',因为它正由另一个进程使用。”以下是发生错误的行:

Dim output As New IO.StreamWriter(path, False, UnicodeEncoding.Default)

我想我可以抛出一个try catch,但是如果发生了与此特定事件无关的IOException呢?有没有办法在允许此代码运行之前检查文件是否已打开?我看了谷歌,但找不到直接的答案,特别是当我使用excel时。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Marshal.GetLastWin32Error()来查找导致异常的Windows错误。例如:

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