如果变量AND变量则

时间:2019-09-12 21:44:00

标签: vba

我发现此过程here用于测试文件是否存在:

Public Function FileExists(strFileFullPath As String) As Boolean
Dim lSize  As Long
    On Error GoTo HandleError
    lSize = -1
    If GetAttr(strFileFullPath) And vbDirectory Then GoTo HandleExit
    lSize = FileLen(strFileFullPath)
    FileExists = lSize > -1
HandleExit:
    Exit Function
HandleError:
    Resume Next
End Function


我最初很想纠正这个问题:

    If GetAttr(strFileFullPath) And vbDirectory Then

进入:

   If GetAttr(strFileFullPath) = vbDirectory Then

但随后令人惊讶地发现结果是相同的。

有人可以解释第一个版本的解释方式吗?

1 个答案:

答案 0 :(得分:3)

此处的AND执行按位比较。

GetAttr(filename)返回一个位掩码。

如果文件只是目录,将其更改为=只会返回相同的结果。如果它是隐藏的,已归档的或系统目录,则它将具有不同的值,并且它们将不再相等。按位比较可确保至少文件名引用目录

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/getattr-function