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 秒間ロックされます。従来の POS アプリケーション用であるため、このファイルがネットワーク上に存在するかどうかを 1 秒以内に確認する必要があります。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

GetAttrVBとこのようなエラー ハンドラで書き直すことができます。

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 に答える