3

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

1 faReadOnly
2 faHidden
4 faSysFile
8 faVolumeID
16 faDirectory
32 faArchive
64 faSymLink
71 faAnyFile

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

4

4 回答 4

6

事实证明 FindFirst() 找到的文件已压缩,因此设置了压缩位。我花了一段时间才弄清楚,我在网络上找不到说明设置压缩位时 TSearchRec.Attr 的实际值的参考。取消单击文件高级属性中的“压缩文件”就可以了。

于 2010-01-05T12:21:44.950 回答
5

中的属性TSearchRec直接映射到与来自 的记录一起使用的Windows 文件属性TWin32FindDataFindFirstFile

在十六进制中(总是以十六进制呈现位字段,而不是十进制),2080 是 0820 美元,很明显设置了两个位。低位对应File_Attribute_Archive, 或 Delphi 的faArchive, 高位对应File_Attribute_Compressed. 它在 Delphi 附带的单位中没有等效项,但您可以使用JCLJclFileUtils.faCompressed中的符号。

于 2010-01-05T18:32:19.740 回答
3

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;
于 2010-01-05T12:39:25.797 回答
1

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

if ((sr.Attr AND faDirectory) <> 0) then

begin 
     .......
end;
于 2011-09-28T12:47:18.547 回答