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.

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top