Getattr, ses faiblesses [Résolu]

Messages postés
562
Date d'inscription
samedi 10 janvier 2004
Dernière intervention
11 octobre 2010
- - Dernière réponse : cs_yvesyves
Messages postés
562
Date d'inscription
samedi 10 janvier 2004
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?
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
3
Merci
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 !?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
0
Merci
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
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
0
Merci
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 !?
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
0
Merci
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
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
0
Merci
et en parlant d'Archive visiter celle ci:



http://www.vbfrance.com/forum.v2.aspx?ID=441042
Daniel
Messages postés
562
Date d'inscription
samedi 10 janvier 2004
Dernière intervention
11 octobre 2010
0
Merci
Je sais pas les tests que vous faites mais moi ca a super bien marché!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.