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

我正在导出我的数据集到一个excel文件,我想确保我控制任何文件错误。 我特别关心的是访问已经打开的文件。 出现一个普通的IOException,说:“进程无法访问文件”C:\ Reports \ report300.csv“,因为它正在被另一个进程使用。 这里是错误发生的路线:

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

我想我可以试一试,但是如果发生了一个与这个特定事件无关的IOException呢? 有没有一种方法可以在允许此代码运行之前检查文件是否已经打开? 我看着谷歌,但无法find一个直接的答案,特别是当我使用Excel。

提前致谢。

您可以使用Marshal.GetLastWin32Error()来找出哪些Windows错误导致exception。 例如:

 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