我发现此过程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
但随后令人惊讶地发现结果是相同的。
有人可以解释第一个版本的解释方式吗?
答案 0 :(得分:3)
此处的AND
执行按位比较。
GetAttr(filename)返回一个位掩码。
如果文件只是目录,将其更改为=
只会返回相同的结果。如果它是隐藏的,已归档的或系统目录,则它将具有不同的值,并且它们将不再相等。按位比较可确保至少文件名引用目录
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/getattr-function