R
RB Smissaert
Just discovered that you can't rely on the old Dir function to check if a
file exists or not and I thought it might be worth it to post this to this
forum.
I always used a function like this to test if a file exists:
Function bFileExists3(ByVal sFile As String) As Boolean
bFileExists3 = Len(Dir(sFile)) > 0
End Function
This is just no good, try:
MsgBox bFileExists3(""), , Dir("")
I get True as Dir("") gives me: 256 colours.htm
When I make the function like this:
Function bFileExists3(ByVal sFile As String) As Boolean
bFileExists3 = Len(Dir(sFile)) > 0 And Len(sFile) > 0
End Function
It will work in VBA, but not when I make an ActiveX dll in VB6.
Strangely, the len function doesn't give zero.
I have no public or private variables that could mess the function up.
I have found 2 alternatives to check if a file exists or not, the first one
is from
Randy Birch's site. Both seem to work fine.
Option Explicit
Private Declare Function PathFileExists Lib "shlwapi" _
Alias "PathFileExistsA" _
(ByVal pszPath As String) As Long
Function bFileExists(ByVal sPath As String) As Boolean
'Determines if a file exists. This function
'tests the validity of the file and path. It
'works only on the local file system or on a
'remote drive that has been mounted to a drive
'letter.
'
'It will return False for remote file paths
'that begin with the UNC names \\server
'or \\server\share. It will also return False
'if a mounted remote drive is out of service.
'
'Requires Version 4.71 and later of Shlwapi.dll
bFileExists = PathFileExists(sPath) = 1
End Function
Function bFileExists2(ByVal sFile As String) As Boolean
Dim lAttr As Long
On Error Resume Next
lAttr = GetAttr(sFile)
bFileExists2 = (Err.Number = 0) And ((lAttr And vbDirectory) = 0)
On Error GoTo 0
End Function
Will stick with the API one for now.
RBS
file exists or not and I thought it might be worth it to post this to this
forum.
I always used a function like this to test if a file exists:
Function bFileExists3(ByVal sFile As String) As Boolean
bFileExists3 = Len(Dir(sFile)) > 0
End Function
This is just no good, try:
MsgBox bFileExists3(""), , Dir("")
I get True as Dir("") gives me: 256 colours.htm
When I make the function like this:
Function bFileExists3(ByVal sFile As String) As Boolean
bFileExists3 = Len(Dir(sFile)) > 0 And Len(sFile) > 0
End Function
It will work in VBA, but not when I make an ActiveX dll in VB6.
Strangely, the len function doesn't give zero.
I have no public or private variables that could mess the function up.
I have found 2 alternatives to check if a file exists or not, the first one
is from
Randy Birch's site. Both seem to work fine.
Option Explicit
Private Declare Function PathFileExists Lib "shlwapi" _
Alias "PathFileExistsA" _
(ByVal pszPath As String) As Long
Function bFileExists(ByVal sPath As String) As Boolean
'Determines if a file exists. This function
'tests the validity of the file and path. It
'works only on the local file system or on a
'remote drive that has been mounted to a drive
'letter.
'
'It will return False for remote file paths
'that begin with the UNC names \\server
'or \\server\share. It will also return False
'if a mounted remote drive is out of service.
'
'Requires Version 4.71 and later of Shlwapi.dll
bFileExists = PathFileExists(sPath) = 1
End Function
Function bFileExists2(ByVal sFile As String) As Boolean
Dim lAttr As Long
On Error Resume Next
lAttr = GetAttr(sFile)
bFileExists2 = (Err.Number = 0) And ((lAttr And vbDirectory) = 0)
On Error GoTo 0
End Function
Will stick with the API one for now.
RBS