Fileattribute

Résolu
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 6 févr. 2009 à 12:10
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 6 févr. 2009 à 15:48
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 févr. 2009 à 12:25
  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="" />
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
6 févr. 2009 à 14:46
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
3
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 févr. 2009 à 12:38
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
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
6 févr. 2009 à 13:45
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 févr. 2009 à 14:18
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
0
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 févr. 2009 à 14:22
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
0
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 févr. 2009 à 15:11
>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
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
6 févr. 2009 à 15:48
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
0