Getattr, ses faiblesses [Résolu]

cs_yvesyves 562 Messages postés samedi 10 janvier 2004Date d'inscription 11 octobre 2010 Dernière intervention - 18 nov. 2005 à 17:39 - Dernière réponse : cs_yvesyves 562 Messages postés samedi 10 janvier 2004Date d'inscription 11 octobre 2010 Dernière intervention
- 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

cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 18 nov. 2005 à 18:42
+3
Utile
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 !?
Cette réponse vous a-t-elle aidé ?  
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 18 nov. 2005 à 18:47
0
Utile
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
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 18 nov. 2005 à 19:34
0
Utile
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 !?
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 18 nov. 2005 à 19:42
0
Utile
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
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 18 nov. 2005 à 20:01
0
Utile
et en parlant d'Archive visiter celle ci:



http://www.vbfrance.com/forum.v2.aspx?ID=441042
Daniel
cs_yvesyves 562 Messages postés samedi 10 janvier 2004Date d'inscription 11 octobre 2010 Dernière intervention - 18 nov. 2005 à 20:46
0
Utile
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.