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.

Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top