MartyConnelly
martyconnelly at shaw.ca
Mon Sep 29 14:49:48 CDT 2003
if you know the filename you could try
This is from MSKB Last reviewed: August 1, 1997 Article ID: Q172240
but they seem to have removed the KB article.
Note if you try this with Notebook to open the file, Notebook only
takes a copy and then releases the file.
The function described here is called IsFileAlreadyOpen, declared as:
Function IsFileAlreadyOpen(Filename As String) As BOOLEAN
If this function returns TRUE, then the file is already open. It
determines that the file is already open only if it gets
ERROR_SHARING_VIOLATION when it attempts to open the file.
It will return FALSE in the following conditions:
- The file is not already open.
- The calling application does not have access to the file due to NTFS
security.
- The file does not exist.
You should check if the file exists before calling the function to
eliminate the possibility of the latter condition.
Sample Code: Microsoft Visual Basic version of IsFileAlreadyOpen
----------------------------------------------------------------
' Declaration for APIs used by our function...
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
' Our Function...
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
' Make sure we close the file on success.
Else
lclose (hFile)
End If
' Check for sharing violation error.
If (hFile = -1) And (lastErr = 32) Then
IsFileAlreadyOpen = True
Else
IsFileAlreadyOpen = False
End If
Bill Kollodge wrote:
> Can anyone tell me how to detect if a specific file number is already
> open (besides dealing with the error 55 which results)?
>
> Bill Kollodge
> New Product Development
> Park Industries
> St. Cloud, MN
> 320-251-5077
> bkollodge at parkindustries.com
>
>------------------------------------------------------------------------
>
>_______________________________________________
>dba-VB mailing list
>dba-VB at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/dba-vb
>http://www.databaseadvisors.com
>
>
>