以下代码:
If FileExists(XCustPath + "XCust.dat") Then
XCustRun
End If
和这段代码:
Public Function FileExists(ByVal Fname As String) As Boolean
Dim lRetVal As Long
Dim OfSt As OFSTRUCT
lRetVal = OpenFile(Fname, OfSt, OF_EXIST)
If lRetVal <> HFILE_ERROR Then
FileExists = True
Else
FileExists = False
End If
End Function
XCustPath指向一个映射的网络位置,其中包含文件XCust.dat。
但是就行了:
lRetVal = OpenFile(Fname, OfSt, OF_EXIST)
它需要永远,并锁定我的程序20-30秒。它需要在不到1秒的时间内检查网络上是否存在此文件,就像传统销售点应用程序一样。无论如何我是否可以强制它超过代码行,如果它需要超过一秒?如果它确实存在,它运行平稳和完美。或者非常快速地检查网络上的文件是否存在?
答案 0 :(得分:4)
这应该更快:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.fileexists(Fname) ...
答案 1 :(得分:3)
试试这个......
Public Function FileExists(ByVal Fname As String) As Boolean
FileExists = iif (Dir(Fname)<>"", true, false)
End Function
答案 2 :(得分:1)
最快的是检查文件属性(由于遗留原因)。我正在使用API
这样的功能
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Public Function FileExists(sFile As String) As Boolean
FileExists = (GetFileAttributes(sFile) <> -1) ' INVALID_FILE_ATTRIBUTES
End Function
你可以用VB的GetAttr
和像这样的错误处理程序重写它
Public Function FileExists(sFile As String) As Boolean
On Error GoTo QH
GetAttr sFile
FileExists = True
QH:
End Function
我更喜欢第一个版本,因为我为所有项目设置了Break on All Errors
。