ファイルが使用中かどうかをチェックするには、ファイルが使用中だとファイル名を変更できないのを利用して、以下のようにします。
Imports System.IO
Public Class FileSystemForm
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If CheckFileUsing("c:\test\test.csv") Then
MessageBox.Show("使用中です。")
End If
End Sub
''' <summary>
''' ファイルが使用中かどうかをチェックする
''' </summary>
''' <param name="vstrFilePath">ファイルの絶対パス</param>
''' <returns>True:使用中 False:使用中ではない</returns>
''' <remarks></remarks>
Private Function CheckFileUsing(ByVal vstrFilePath As String) As Boolean
Dim f As New FileInfo(vstrFilePath)
Dim strFileNameBK As String = f.Name
If Not f.Exists Then
'ファイルが存在しなければ、使用中ではない
Return False
End If
Try
'ファイル名を変更して、使用中かチェックする
f.MoveTo(Path.Combine(f.DirectoryName, f.Name & ".BK"))
'ファイル名を元に戻す
f.MoveTo(Path.Combine(f.DirectoryName, strFileNameBK))
'ファイル名の変更が成功したので、使用中ではない
Return False
Catch ex As Exception
'ファイル名が変更できないので、使用中とする
Return True
End Try
End Function
End Class
注)上記の方法では、メモ帳など排他制御したいアプリで開いている場合は、使用中でないと判断されます。
注)DLLの場合、参照しているEXEが起動中でもDLLは使用中でないと判断されます。