valore di attributo strano riportato da FindFirst (), Attr = 2080
-
18-09-2019 - |
Domanda
Durante la ricerca di file con FindFirst () ottengo un valore di attributo nel campo TSearchRec.Attr del 2080. E non è specificato nella guida in quanto ci sono solo questi valori disponibili e nessuna combinazione di questi rendimenti 2080:
1 faReadOnly
2 faHidden
4 faSysFile
8 faVolumeID
16 faDirectory
32 faArchive
64 faSymLink
71 faAnyFile
Qualcuno sa cosa significa 2080 e perché ottengo che il valore di attributo? Il sistema operativo è XP embedded.
Soluzione
Si scopre che il file trovato da FindFirst () è stato compressa e quindi aveva impostato il bit compressi. Mi ci volle un po 'per capire e non sono riuscito a trovare un punto di riferimento sul web che ha dichiarato il valore effettivo della TSearchRec.Attr quando viene impostato il bit compressi. Cliccando di "File Compress" nei file avanzata proprietà ha fatto il trucco.
Altri suggerimenti
TSearchRec
mappa direttamente al file di Windows attributi utilizzato con il TWin32FindData
record da FindFirstFile
.
In esagonale (sempre rendere i campi di bit in esadecimale, decimale non), 2080 è di $ 0820, in cui è chiaro che ci sono due bit impostati. Il bit inferiore corrisponde File_Attribute_Archive
, o Delphi di faArchive
, e il bit superiore corrisponde File_Attribute_Compressed
. Essa non ha equivalenti nelle unità che vengono con Delphi, ma è possibile utilizzare il JclFileUtils.faCompressed
simbolo dal JCL .
In unità JclFileUtils
da Jedi Code Library che ho trovato:
faNormalFile = $00000080;
...
faNotContentIndexed = $00002000;
Se 2080 è in esadecimale, allora questo è.
Si veda anche: http: //www.tek-tips .com / viewthread.cfm? qid = 1543818 & page = 9
EDIT: Mentre 2080 id decimale e 2080 Dec = 820 hex quindi attributi sono combinazione di:
faArchive = $00000020;
faCompressed = $00000800;
Questo estrarrà il bit faDirectory e non dovete preoccuparvi di bit compression set o meno.
if ((sr.Attr AND faDirectory) <> 0) then
begin
.......
end;