首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

【编程急需注意的一小点】

2013-02-25 
【编程需要注意的一小点】我在设计一个程序的时候,使用GetAttr函数来获取一个路径的属性,判断这个路径是不是

【编程需要注意的一小点】
我在设计一个程序的时候,使用GetAttr函数来获取一个路径的属性,判断这个路径是不是目录。
If GetAttr("C:\Windows\Test")=vbDirectory Then
    Debug.Print("这个是目录")
Else
    Debug.Print("这不是文件")
End If

结果发现,它无法识别文件夹。而且返回的数字是22,并不在人任何一个属性对应的数值(不是1、2、4、16、32)。
所以,我纠结了一下,为什么返回的值不是1、2、4、16、32中的任意一个。
后来才意识到,原来GetAttr返回的值是多种属性复合而成。
对GetAttr返回值二进制分析:
0000 0000 Normal,正常          第一位,0,作为正常标志位
0000 0001 VbReadOnly,只读      第一位,1,作为只读标志位
0000 0010 vbHidden,隐藏        第二位,1,作为隐藏标志位
0000 0100 vbSystem,系统文件    第三位,1,作为系统文件(夹)标志位
0000 1000 vbVolume,卷标        第四位,1,作为卷标标志位
0001 0000 vbDirectory,目录或文件夹  第三位作为标志位   第五位,1,作为目录标志位
0010 0000 vbArchive,上次备份以后,文件已经改变     第六位,1,作为“上次备份以后,文件已经改变”标志位
0100 0000 vbAlias,指定的文件名是一个别名。只在Macintosh中可用。   第七位,1,作为“指定文件名是别名”标志位
这个GetAttr返回的值是这几种属性几个的求或。比如一个文件是:“正常+系统”
则它的GetAttr是(0000 0100)|(0000 0000)=4
还有一个文件夹是:“系统+目录”
则它的GetAttr是(0001 0000)|(0000 0100)=20

所以,如果只想判断一个文件路径指向的东西是不是目录,就是:
GetAttr("C:\Windows") && &H10
这样可以滤出这个特定的标志位,即“文件夹标志位”的值。如果相与为&H10,则此为文件夹。


以上经验之谈,高手请勿喷。
[解决办法]
GetAttr("C:\Windows") && &H10
=>
GetAttr("C:\Windows") And &H10

[解决办法]
【编程急需注意的一小点】
没有用过,.net使用direction

热点排行