valor de atributo Strange reportado por FindFirst (), Attr = 2080
-
18-09-2019 - |
Pregunta
Durante la búsqueda de archivos con FindFirst () consigo un valor de atributo en el campo TSearchRec.Attr de 2080. No se especifica en la ayuda, ya que hay sólo estos valores disponibles y ninguna combinación de ellos rinde 2080:
1 faReadOnly
2 faHidden
4 faSysFile
8 faVolumeID
16 faDirectory
32 faArchive
64 faSymLink
71 faAnyFile
¿Alguien sabe qué medios 2080 y por qué me sale que el valor del atributo? El sistema operativo está incrustado XP.
Solución
Resulta que el archivo encontrado por FindFirst fue comprimido () y por lo tanto tenía el conjunto de bits comprimido. Me tomó un tiempo para averiguar y no pude encontrar una referencia en la web que indica el valor real de TSearchRec.Attr cuando se establece el bit comprimido. Unclicking "Comprimir archivos" en los archivos de propiedades avanzadas resolvieron el problema.
Otros consejos
atributos en TSearchRec
mapa directamente a la archivos de Windows atributos utiliza con el TWin32FindData
registro de FindFirstFile
.
En hexagonal (siempre representar campos de bits en hexadecimal, no decimal), 2080 es $ 0820, donde está claro que hay dos bits puestos. El bit más baja corresponde a File_Attribute_Archive
, o Delphi de faArchive
, y el bit superior corresponde a File_Attribute_Compressed
. Que no tiene equivalente en las unidades que vienen con Delphi, pero se puede utilizar el símbolo JclFileUtils.faCompressed
de la JCL .
En la unidad JclFileUtils
del Código de la Biblioteca Jedi que encontré:
faNormalFile = $00000080;
...
faNotContentIndexed = $00002000;
Si 2080 es en hexadecimal entonces eso es todo.
Mire también en: http: //www.tek-tips .com / viewthread.cfm? qid = 1543818 & page = 9
EDIT: Mientras 2080 decimal ID, y 2080 Dec = 820 hex a continuación atributos son combinación de:
faArchive = $00000020;
faCompressed = $00000800;
Esto extraerá el bit faDirectory y usted no tiene que preocuparse por el bit de deformación permanente por compresión o no.
if ((sr.Attr AND faDirectory) <> 0) then
begin
.......
end;