sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
6 févr. 2009 à 12:10
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 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 ?
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 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 ?
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 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)
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 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...