Fileattribute

Résolu
Signaler
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
Bonjour,

Je liste un répertoire sur un site ftp en restreignant sur le fileattribute = faAnyFile (qui est normalement équivalent à 63). Mais l'attibut du fichier de la recherche (un banal fichier txt) est 128. A quel "fa" correspond le 128 ?

Merci

Simon

8 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
  faReadOnly  = $00000001 ; = 1  faHidden    $00000002 ;  2  faSysFile   $00000004 ;  4  faVolumeID  $00000008 ;  // not used in Win32  8  faDirectory $00000010;   16  faArchive   $00000020 ;  32
  faSymLink   = $00000040 ;= 64  faNormal    $00000080 ; 128  faTemporary $00000100 ; 256  faAnyFile   $000001FF;  511

 
@+
Cirec

<hr siz="" />
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
essaye en remplacant
                   if STRUCT_DATA.dwFileAttributes = AAttrib then begin
par
                   if STRUCT_DATA.dwFileAttributes <> faDirectory then begin

tu va perdre l'interet de ton parametre AAttrib, mais si tu veux lister les fichiers, ca devrait repondre a ton probleme
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Ok merci Cirec pour ta réponse.
Afin de comprendre un peu mieux comment ça marche, pourquoi ma constante faAnyFile = 63 sous mon delphi 5 ? (Je sais, c'est un peu vieux...) Et pourquoi mon fichier texte ne répond pas à faAnyFile sur le net alors qu'en local ça passe ?

Simon
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
les attributs de fichiers sont des flags (donc operateurs de bits). Si tu as :
faAnyFile = 111111111 (A)
faNormal  = 010000000 (B)
A Or B    = 010000000
qui est different de 0, donc le fichier sera validé par le flag.
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Bon, ok, merci G., mais comment je peux adapter ta réponse à mon code ? Apparemment, chez moi, ça gère des valeurs décimales...

Ci joint le code (repris je crois du Tiny FTP de M. ELGUEVEL - Super au passage) :
procedure ListerFichiersFTP(AList : TStrings; AMask : String ''; AAttrib : DWord faAnyFile);
var
{--------------------------------}
    STRUCT_DATA : _WIN32_FIND_DATAA;
{--------------------------------}
    FoundFile   : Pointer;
{--------------------------------}
    bFound,
    BeFolder    : boolean;
{--------------------------------}
    LS_Mask     : string;
{--------------------------------}
begin
     BeFolder  := False;
     FoundFile := nil;
     bFound    := False;
     if PConnexionFTP <> nil then begin
        if AMask <> ''
           then LS_Mask := AMask
           else LS_Mask := '*.*';
        FoundFile := FtpFindFirstFile(PConnexionFTP, PChar(LS_Mask), STRUCT_DATA, 0, 0);
        if FoundFile <> nil then begin
           repeat
                 if (Trim(STRUCT_DATA.cFileName) <> '..')
                    and (Trim(STRUCT_DATA.cFileName) <> '.') then begin
                    // Nom long ou court ?
                    if STRUCT_DATA.dwFileAttributes = AAttrib then begin
                       if Trim(STRUCT_DATA.cFileName) <> ''
                          then AList.Add(STRUCT_DATA.cFileName)
                          else AList.Add(STRUCT_DATA.cAlternateFileName);
                    end;
                 end;
                 bFound : = InternetFindNextFile(FoundFile, @STRUCT_DATA);
           until not bFound;
           InternetCloseHandle(FoundFile);
        end;
     end;
end;
Problème : J'appelle ma procedure ListerFichiersFTP(MaList, '*.txt', faAnyFile). Dans mon répertoire, et je suis bien dans le bon répertoire (testé), j'ai bien un fichier "MonFichier.txt". Eh bien, en mettant un point d'arrêt sur la boucle, je vois bien passer mes fichiers, mais la ligne en rouge n'est pas vérifié car "dwFileAttributes" 128 et AAttrib 63. Alors, je veux bien mettre ListerFichiersFTP(MaList, '*.txt', faNormal), mais qu'est ce qui me dit que la fois d'après ça sera pas un faAnyFile dont j'aurai besoin ??? (J'adooooore l'informatique)

Simon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Re,

Je viens de tester avec faNormal... et delphi ne le reconnait pas. Je suppose que c'est la version (5) qui ne l'intègre pas... Une idée ?

Simon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
>Guillemouze
Ouais, en même temps, avec le mask, ça devrait suffir.... Et sinon, tu connais un moyen de gérer les flags en binaire, comme tu me l'as expliqué un peu plus haut ? Parce que ça pourrait aussi être utile pour un FindFirst ou autre...

Simon
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
bah en utilisant les "and", "or" et "xor"
pour utiliser les bits en hexa, c'est assez simple, il faut juste utiliser 1, 2, 4 et 8 :

const
  C1 = $01; //00000001 en binaire 

  C2 = $02; //00000010

  C3 = $04; //00000100

  C4 = $08; //00001000



  C5 = $10; //00010000



  C6 = $20; //00100000



  C7 = $40; //01000000



  C8 = $80; //10000000