3

以下代码:

    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 秒的时间内检查该文件是否存在于网络上,因为它适用于传统的销售点应用程序。如果需要超过一秒的时间,我是否可以强制它超时代码行?如果它确实存在,它运行顺利且完美。或者一种非常快速的方法来检查网络上的文件是否存在?

4

3 回答 3

4

这应该更快:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.fileexists(Fname) ...
于 2013-07-25T05:17:03.220 回答
3

尝试这个 ....

Public Function FileExists(ByVal Fname As String) As Boolean
        FileExists = iif (Dir(Fname)<>"", true, false)
End Function
于 2013-07-25T04:54:34.200 回答
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

您可以使用 VBGetAttr和这样的错误处理程序重写它

Public Function FileExists(sFile As String) As Boolean
    On Error GoTo QH
    GetAttr sFile
    FileExists = True
QH:
End Function

我更喜欢第一个版本,因为我一直Break on All Errors在为我的所有项目进行设置。

于 2013-07-29T11:26:50.353 回答