代码之家  ›  专栏  ›  技术社区  ›  Niklas Winde

FindFirst()报告的奇怪属性值,Attr=2080

  •  3
  • Niklas Winde  · 技术社区  · 16 年前

    使用FindFirst()搜索文件时,我在TsarchRec.Attr字段2080中获得一个属性值。帮助中没有指定该属性值,因为只有这些值可用,并且它们的组合不会产生2080:

    再见
    法赫登2号


    16董事会
    32 fa档案
    64时尚链接
    71法尼档案

    有人知道2080是什么意思吗?我为什么得到那个属性值?操作系统是XP嵌入式的。

    4 回复  |  直到 16 年前
        1
  •  6
  •   Niklas Winde    16 年前

    原来FindFirst()找到的文件是压缩的,因此设置了压缩位。我花了一段时间才弄明白,在web上找不到一个引用,在设置压缩位时,该引用说明了TSearchRec.Attr的实际值。在文件高级属性中取消选中“压缩文件”就成功了。

        2
  •  5
  •   Rob Kennedy    16 年前

    属性 TSearchRec 直接映射到 Windows file attributes TWin32FindData 记录自 FindFirstFile

    在十六进制(总是以十六进制而不是十进制呈现位字段)中,2080是$0820,显然有两个位设置。低位对应于 File_Attribute_Archive ,或德尔福 faArchive ,并且高位对应于 File_Attribute_Compressed . 它在Delphi附带的单位中没有等价物,但是您可以使用 JclFileUtils.faCompressed JCL

        3
  •  3
  •   Michał Niklas    16 年前

    在里面 JclFileUtils 我从绝地密码库找到的单位:

    faNormalFile        = $00000080;
    ...
    faNotContentIndexed = $00002000;
    

    如果2080是十六进制,那么这就是它。

    http://www.tek-tips.com/viewthread.cfm?qid=1543818&page=9

    编辑:

     faArchive     = $00000020;
     faCompressed  = $00000800;
    
        4
  •  1
  •   cdeszaq Sudhir N    14 年前

    这将提取faDirectory位,您不必担心压缩位是否设置。

    if ((sr.Attr AND faDirectory) <> 0) then
    
    begin 
         .......
    end;
    
    推荐文章