La valeur d'attribut étrange rapporté par FindFirst (), Attr = 2080
-
18-09-2019 - |
Question
Lors de la recherche de fichiers avec FindFirst () Je reçois une valeur d'attribut dans le champ TSearchRec.Attr de 2080. Il n'est pas spécifié dans l'aide, car il n'y a que ces valeurs disponibles et aucune combinaison d'entre eux rendements 2080:
1 faReadOnly
2 faHidden
4 faSysFile
8 faVolumeID
16 faDirectory
32 faArchive
64 faSymLink
71 faAnyFile
Quelqu'un sait-il ce que 2080 signifie et pourquoi je reçois cette valeur d'attribut? Le système d'exploitation est XP embedded.
La solution
Il se trouve que le fichier trouvé par FindFirst () a été comprimé et a donc le bit comprimé. Il m'a fallu un certain temps pour comprendre et je ne pouvais pas trouver une référence sur le web qui indique la valeur réelle de TSearchRec.Attr quand est réglé le bit comprimé. Décliquetage « Compresser le fichier » dans les fichiers des propriétés avancées a fait l'affaire.
Autres conseils
TSearchRec
carte directement sur fichiers Windows attributs utilisé avec le TWin32FindData
enregistrement FindFirstFile
.
Dans hex (toujours afficher les champs de bits en hexadécimal, non décimal), 2080 est 0820 $, où il est clair qu'il ya deux bits mis. Le bit de plus faible correspond à File_Attribute_Archive
ou Delphi de faArchive
, et le bit supérieur correspond à File_Attribute_Compressed
. Il n'a pas d'équivalent dans les unités qui viennent avec Delphi, mais vous pouvez utiliser le JclFileUtils.faCompressed
symbole du JCL .
Dans l'unité de JclFileUtils
du code Jedi Library je trouve:
faNormalFile = $00000080;
...
faNotContentIndexed = $00002000;
Si 2080 est en hexadécimal alors ce qu'il est.
Regardez aussi: http: //www.tek-tips .com / viewthread.cfm? qid = 1543818 & page = 9
EDIT: Alors que 2080 décimal id et 2080 dec = 820 hex alors les attributs sont une combinaison de:
faArchive = $00000020;
faCompressed = $00000800;
Cela va extraire le bit faDirectory et vous n'avez pas à vous soucier du bit de compression défini ou non.
if ((sr.Attr AND faDirectory) <> 0) then
begin
.......
end;