Private Declare Function lopen Lib "kernel32" Alias "_lopen" _
(ByVal lpPathName As String,ByVal iReadWrite As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Declare Function lclose Lib "kernel32" Alias "_lclose" _
(ByVal hFile As Long) As Long
''' <summary>
''' 既にファイルがオープンされているかの確認
''' </summary>
''' <param name="Filename">判断ファイル</param>
''' <returns>true:opening,false:closed</returns>
''' <remarks></remarks>
Public Shared Function IsFileAlreadyOpen(ByVal Filename As String) As Boolean
Dim hFile As Long
Dim lastErr As Long
' ファイル ハンドルとエラー変数の初期化。
hFile = -1
lastErr = 0
' 読み取り専用および排他共有でオープン。
hFile = lopen(Filename,&H10)
' ファイルをオープンできない場合は、直前のエラーを取得させます。
If hFile = -1 Then
lastErr = Err.LastDllError
' ファイルを正常にクローズできるかどうかを確認してください。
Else
lclose(hFile)
End If
' 共有違反エラーがないかどうかを確認してください。
If (hFile = -1) And (lastErr = 32) Then
IsFileAlreadyOpen = True
Else
IsFileAlreadyOpen = False
End If
End Function