VB 6检查网络上的文件是否存在需要太长时间

时间:2013-07-25 04:18:24

标签: file vb6 network-programming directory

以下代码:

    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秒的时间内检查网络上是否存在此文件,就像传统销售点应用程序一样。无论如何我是否可以强制它超过代码行,如果它需要超过一秒?如果它确实存在,它运行平稳和完美。或者非常快速地检查网络上的文件是否存在?

3 个答案:

答案 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