主题:一个很奇怪的AND问题
qingdaofeng
[专家分:3160] 发布于 2008-07-26 18:11:00
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' 如果它是一个目录,将其名称显示出来。
End If
大家看见没有,上面if语句中有一个and,不知道在这里是什么意思?
单纯用if getAttr(Mypath & Myname) = vbdirectory then
不就可以了么?为什么还要加一个and vbdirectory
我是从MSDN中复制出来的,还有很多都是类似情形,比如:
Effect = vbDropEffectCopy and vbDropEffectCopy
这里不用后面的and VbDropEffectCopy就不行了???奇怪了,不知道有什么区别
回复列表 (共6个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-07-26 18:32:00
很简单,把自己认为不需要的部分去掉,然后在不同参数下运行。
如果没有差别,那就好了。
如果有差别,在测试逻辑表达式个部分的值,找到原因,就知道了。
板凳
qingdaofeng [专家分:3160] 发布于 2008-07-26 18:44:00
问题是测试结果一摸一样,现在的问题是要把这种表达方式搞清楚:-)
3 楼
bcahzvip [专家分:6040] 发布于 2008-07-26 19:11:00
If GetAttr(MyPath & MyName) And vbDirectory Then
'这样不行吗?
endif
4 楼
tanchuhan [专家分:15140] 发布于 2008-07-26 20:19:00
GetAttr(MyPath & MyName)
返回的属性可能包含多个属性值,它们是通过位或运算Or合并成一个整数的
所以需要用位与运算And分离,测试是否包含自己需要的属性
例如你想测试一个文件是不是同时具有"隐藏"和"系统"属性,可以这样
If GetAttr("D:\test.txt") And (vbHidden Or vbReadOnly) Then
'Place your code here
End If
5 楼
bcahzvip [专家分:6040] 发布于 2008-07-27 19:33:00
[quote]GetAttr(MyPath & MyName)
返回的属性可能包含多个属性值,它们是通过位或运算Or合并成一个整数的
所以需要用位与运算And分离,测试是否包含自己需要的属性
例如你想测试一个文件是不是同时具有"隐藏"和"系统"属性,可以这样
If GetAttr("D:\test.txt") And (vbHidden Or vbReadOnly) Then
'Place your code here
End If[/quote]
"隐藏"或"只读"
6 楼
tanchuhan [专家分:15140] 发布于 2008-07-27 23:01:00
[quote][quote]GetAttr(MyPath & MyName)
返回的属性可能包含多个属性值,它们是通过位或运算Or合并成一个整数的
所以需要用位与运算And分离,测试是否包含自己需要的属性
例如你想测试一个文件是不是同时具有"隐藏"和"系统"属性,可以这样
If GetAttr("D:\test.txt") And (vbHidden Or vbReadOnly) Then
'Place your code here
End If[/quote]
"隐藏"或"只读"[/quote]
需要测试的是"隐藏"且"只读",不是或.
我的代码错了,测试2个以上的结果需要加上=号,
(GetAttr("D:\test.txt") And (vbHidden Or vbReadOnly)) = (vbHidden Or vbReadOnly)
或者这样吧
Dim ret As VbFileAttribute
ret = GetAttr("D:\test.txt")
If (ret And vbHidden) And (ret And vbReadOnly) Then
'Place your code here
End If
我来回复