cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 18 nov. 2005 à 18:42
Salut,
Je ne pense pas que c'est une fablesse de getattr, voir la MSDN :
La valeur renvoyée par GetAttr est la somme des valeurs d'attributs ci-dessous :
Constante
,
Valeur
,
Description
,
----
vbNormal
,
0
,
Normal
,
----
vbReadOnly
,
1
,
Lecture seule
,
----
vbHidden
,
2
,
Caché
,
----
vbSystem
,
4
,
Système.
,
----
vbDirectory
,
16
,
Répertoire ou dossier
,
----
vbArchive
,
32
,
Fichier modifié depuis la dernière sauvegarde.
Donc, en résumant, getattr te renvoie 16 (vbdirectory) si et seulement si c'est un dossier normal sans autres attributs. Si ton dossier est en lecture seule, getattr renverra 17 (vbdirectory and vbreadonly).
Voilà les différentes valeurs que peut renvoyer getattr sur un dossier :
'16 - dossier
'17 - dossier + lecture seule
'18 - dossier + caché
'19 - dossier + lecture seule + caché
'20 - dossier + système
'21 - dossier + système + lecture seule
'22 - dossier + système + caché
'23 - dossier + système + lecture seule + caché
'48 - dossier + archive
'49 - dossier + archive + lecture seule
'50 - dossier + archive + caché
'51 - dossier + archive + lecture seule + caché
'52 - dossier + archive + système
'53 - dossier + archive + système + lecture seule
'54 - dossier + archive + système + caché
'55 - dossier + archive + système + lecture seule + caché
A partir de là, ou on s'amuse avec une série de or et and (aie, j'en ai mal à la tête) ou on utilise un select case pour savoir exactement le type du dossier, ou, si tu veux seulement savoir si c'est un dossier, quels que soient ses autres attributs :
dim ret as integer
ret = getattr(path)
if (ret >= 16 and ret <= 23) or (ret >= 48 and ret <= 55) then ok =1
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 18 nov. 2005 à 19:34
Daniel, ton idée est meilleure que mon "if (ret >= 16 and ret <= 23) or (ret >= 48 and ret <= 55) then ok =1" mais ta proposition ne fonctionne pas. Je me permet donc de corriger :
if getattr(Path) and vbDirectory then
ok = 1 'c'est un dossier
else
ok = 0 'c'est un fichier
end if
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?