Getattr, ses faiblesses

Résolu
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010 - 18 nov. 2005 à 17:39
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010 - 18 nov. 2005 à 20:46
Slt a tous,

J'utilise

if getattr(Path)=vbdirectory then ok=1

pour savoir si PAh est un dossier

et ca marche mais des que je passe sur un dossier de la partition d:
getattr me renvoie ok=1 quand c'est aussi un fichier dans le valeur
Path. Normal?

J'ai aussi essayé

if getattr(Path and vbdirectory)=vbdirectory then ok=1

et

if getattr(Pathand vbdirectory)<> 0 then ok=1



Rien a faire, alors c'est quoi ce bug. Il n'y aurait pas une solution infaillible pour obtenir les attributes d'un fichier?

6 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
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 !?
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
18 nov. 2005 à 18:47
Path = "C:\windows"

if getattr(Path) and vbDirectory = vbDirectory then Msgbox "Dossier"

Path = "C:\fichier.txt"


if getattr(Path) and vbDirectory = vbDirectory then Msgbox "Fichier"


Daniel
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
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 !?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
18 nov. 2005 à 19:42
j'avais vu merci d'avoir corrigé.



et pour compléter:

je rajouterais que l'attribut Archive signifie que le fichier/dossier n'est pas archivé

que les valeurs 24 à 31 n'existent pas (vbVolume et vbDirectory)

que les valeurs 40 à 47 n'existent pas (vbVolume et vbArchive)
qu'ils existent d'autres attributs étendus:

Alias, Index, Compressé, Temporaire, ...


Daniel
0

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

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
18 nov. 2005 à 20:01
et en parlant d'Archive visiter celle ci:



http://www.vbfrance.com/forum.v2.aspx?ID=441042
Daniel
0
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
18 nov. 2005 à 20:46
Je sais pas les tests que vous faites mais moi ca a super bien marché!
0
Rejoignez-nous