TSearchRec type与FileGetAttr一问(100分)

  • 主题发起人 snowrain
  • 开始时间
S

snowrain

Unregistered / Unconfirmed
GUEST, unregistred user!
在使用FileGetAttr得到TSearchRec type时遇到一个疑问:
if FileGetAttr(ThisPath) //ThisPath='G:';G为光驱盘符
整个FileGetAttr(ThisPath)用Evaluate/Modify看为17,不知道是什么类型?
如果ThisPath为硬盘盘符时(比如C:),整个FileGetAttr(ThisPath)就是16即承认是个Directory ,但是为什么不承认光驱盘符为Directory ?
(faDirectory $00000010就是十进制的16
即ThisPath='C:'时FileGetAttr(ThisPath)就是16)
请高人解释一下。
 
17 :只读目录文件.
16:目录文件.

faReadOnly $00000001 Read-only files //////// 1
faHidden $00000002 Hidden files
faSysFile $00000004 System files
faVolumeID $00000008 Volume ID files
faDirectory $00000010 Directory files ////// 16
faArchive $00000020 Archive files
faAnyFile $0000003F Any file
 
谢谢jsxjd的回答。再问一句:
17是只读目录文件吗?呵呵,我以为只要是目录就是faDirectory,只读目录也应该是呀。
我原来是这样判断一个目录的:
if FileGetAttr(ThisPath)=faDirectory then ……
那么现在究竟应该判断ThisPath是一个文件,还是一个目录呢?

 
有的时候目录返回的值可能不等于$00000010,我碰到过。不知道为什么。

不得已,我只能这样判断:
if not(attr in [faReadOnly,faHidden,faSysFile,faVolumeID,faArchive]) then 是目录。
 
也就是说只能准确地判断出是否是文件,而不能准确判断出是否是目录?
 
我不知道。我是在写一个搜索局域网共享文件的程序时发现这个问题的,原以为只有局域网
上的文件有这个问题,没想到在本地也有这种情况:(
 
FileGetAttr(ThisPath) and faDirectory <> 0 then 是目录
 
不是返回值等于 $00000010,这个数代表一个位掩码,即如果倒数第二位为 1 代表成功
即如果你的返回值的 倒数第二位 为 1,则是目录。判定方法如 Another_eYes 所说。

 
to beta:
"这个数代表一个位掩码,即如果倒数第二位为 1 代表成功"倒数第二位为 1 代表什么成功?
还是不是很懂?
另外如何判断是一个文件?是否不是目录,就是一个文件(NOT关系)?
 
if FileGetAttr(ThisPath) and faDirectory = 0 then 是文件不是目录
 
多人接受答案了。
 
顶部