使用FindFirst()搜索文件时,我在TSearchRec.Attr字段中得到一个2080的属性值。它没有在帮助中指定,因为只有这些值可用且没有它们的组合产生2080:
1 faReadOnly
2 fahidden
4 faSysFile
8 faVolumeID
16目录
32 faArchive
64 faSymLink
71 faAnyFile
有谁知道2080的含义以及我获得该属性值的原因?操作系统是XP嵌入式。
答案 0 :(得分:6)
事实证明,FindFirst()找到的文件已被压缩,因此设置了压缩位。我花了一段时间才弄清楚,当设置压缩位时,我无法在网上找到陈述TSearchRec.Attr实际值的引用。在文件高级属性中取消选中“压缩文件”就可以了。
答案 1 :(得分:5)
TSearchRec
中的属性直接映射到Windows file attributes的TWin32FindData
记录中使用的FindFirstFile
。
在十六进制中(总是以十六进制呈现位字段,而不是十进制),2080是$ 0820,其中很明显有两个位设置。低位对应于File_Attribute_Archive
或Delphi的faArchive
,高位对应于File_Attribute_Compressed
。它与Delphi附带的单元没有对应关系,但您可以使用JclFileUtils.faCompressed
中的JCL符号。
答案 2 :(得分:3)
在Jedi Code Library的JclFileUtils
单元中,我发现:
faNormalFile = $00000080;
...
faNotContentIndexed = $00002000;
如果2080是十六进制,那就是它。
还请看:http://www.tek-tips.com/viewthread.cfm?qid=1543818&page=9
编辑: 虽然2080 id十进制,2080 dec = 820 hex,但属性是:
的组合 faArchive = $00000020;
faCompressed = $00000800;
答案 3 :(得分:1)
这将提取faDirectory位,您不必担心压缩位设置。
if ((sr.Attr AND faDirectory) <> 0) then
begin
.......
end;