打开失败时会有一个错误号返回,你可以用这个错误号来确定是否打开了这个文件

解决方案 »

  1.   

    'Determine whether a file is already open or not
    Private Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
    Private Declare Function lClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
    Private Function IsFileAlreadyOpen(FileName As String) As Boolean
        Dim hFile As Long
        Dim lastErr As Long
        ' Initialize file handle and error variable.
        hFile = -1
        lastErr = 0
        ' Open for for read and exclusive sharing.
        hFile = lOpen(FileName, &H10)
        ' If we couldn't open the file, get the last error.
        If hFile = -1 Then
            lastErr = Err.LastDllError
        Else
            ' Make sure we close the file on success.
            lClose (hFile)
        End If
        ' Check for sharing violation error.
        sFileAlreadyOpen = (hFile = -1) And (lastErr = 32)
    End Function
    Private Sub Form_Load()
        'example by Matthew Gates ([email protected])
        MsgBox IsFileAlreadyOpen("c:\autoexec.bat")
    End Sub