valor de atributo estranho relatado por FindFirst (), Atr = 2080
-
18-09-2019 - |
Pergunta
Ao procurar por arquivos com FindFirst () recebo um valor de atributo no campo TSearchRec.Attr de 2080. Não é especificado na ajuda, pois há apenas estes valores disponíveis e nenhuma combinação deles produz 2080:
1 faReadOnly
2 faHidden
4 faSysFile
8 faVolumeID
16 faDirectory
32 faArchive
64 faSymLink
71 faAnyFile
Alguém sabe o que 2080 meios e por isso que eu obter esse valor de atributo? O sistema operacional é XP incorporado.
Solução
Acontece que o arquivo encontrado por FindFirst () foi comprimido e, portanto, tinha o conjunto de bits comprimido. Levei um tempo para descobrir e eu não poderia encontrar uma referência na web que declarou o valor real do TSearchRec.Attr quando o bit comprimido é conjunto. Unclicking "file Compress" nos arquivos de propriedades avançadas fez o truque.
Outras dicas
Atributos em TSearchRec
mapear diretamente para o atributos de arquivos do Windows usado com o TWin32FindData
registro de FindFirstFile
.
Em hex (sempre renderizar campos de bits em hexadecimal, não decimal) de 2080 é de R $ 0820, onde é claro que há dois bits definidos. Os corresponde inferiores bit para File_Attribute_Archive
, ou Delphi de faArchive
, e os bits superiores para corresponde File_Attribute_Compressed
. Ele não tem equivalente nas unidades que vêm com Delphi, mas você pode usar o JclFileUtils.faCompressed
símbolo do JCL .
Na unidade JclFileUtils
da Biblioteca Código Jedi eu encontrei:
faNormalFile = $00000080;
...
faNotContentIndexed = $00002000;
Se 2080 é em hexadecimal, então é isso.
Veja também: http: //www.tek-tips .com / viewthread.cfm? qid = 1543818 & page = 9
EDIT: Enquanto 2080 decimal ID, e 2080 Dec = 820 hex então atributos são uma combinação de:
faArchive = $00000020;
faCompressed = $00000800;
Isto irá extrair o bit faDirectory e você não precisa se preocupar com o conjunto de bits de compressão ou não.
if ((sr.Attr AND faDirectory) <> 0) then
begin
.......
end;