|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : octobre 2007 Messages : 4 ![]() |
Salut,
Je rencontre sous Vista des problèmes avec la fonction .Size dans un script VBS : '----- ' test '----- Dim fs, fd Set fs = CreateObject("Scripting.FileSystemObject") Set fd = fs.GetFolder("c:\users\dupont\") msgbox fd.size J'obtiens un popup d'erreur : Script : C:\test\test7.vbs Ligne : 8 Caract. : 1 Erreur : Permission refusée Code : 800A0046 Source : Erreur d'exécution Microsoft VBScript Après plusieurs tests, il apparait que cela ne se produit que lorsqu'il y a des sous-répertoires "virtuels", ces fameux répertoires dits de "jonction" auquels on ne peut cependant pas accéder ("access denied") . Je pense que cela pose un problème à la fonction size lorsqu'elle tente de parcourir l'ensemble des répertoires.Quelqu'un a-t-il déjà eu un problème similaire ? Y aurait-il une solution, même de contournement ? Merci à vous. - Aq. |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : octobre 2007 Messages : 4 ![]() |
Bon ben après beaucoup de recherches sur le Web, il semblerait bien que les points de jonction de Vista posent problème à certaines fonctions de language telles que "folder.size" en vbs ou vba :
http://www.dx21.com/HOME/ARTICLES/P2...CLE.ASP?CID=71 Donc, ben... a priori pas de solution évidente -- Aq. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : octobre 2007 Messages : 4 ![]() |
Re-salut,
Bon j'ai finalement résolu mon problème . Je me suis fait un résumé complet que je poste ici au cas où d'autres aient les mêmes problèmes.N'hésitez pas à corriger ou compléter si j'ai fait des erreurs ou imprécisions. A+ Aq. ======== Problème ======== Vista introduit la notion de points de jonction. Il s'agit de liens, au niveau "file system", vers d'autres répertoires. On peut ainsi créer des arborescences personnalisées composées de répertoires éparpillés un peu partout. Vista possède par défaut de nombreux points de jonction qui correspondent aux anciens répertoires XP tels que "Mes documents", "Documents and Settings" etc... Ils sont là par simple souci de compatibilité et on ne peut généralement pas y accéder. L'ennui c'est que certaines fonctions de language telles que "folder.size" sous vbscript, ne se comportent pas correctement lorsqu'elles rencontrent un point de jonction. "folder.size" génère (à ce jour) une erreur du type "permission refusée" code 800A0046 et mettent fin au script, ce qui ne permet pas de calculer la taille d'un répertoire sous Vista qui contient des points de jonction. Autre lien traitant su problème : http://www.dx21.com/HOME/ARTICLES/P2...CLE.ASP?CID=71 ========== Résolution ========== J'ai récupéré la liste des attributs de répertoire sans trouver d'infos sur l'identification des points de jonctions : bit 1 (1): ReadOnly bit 2 (2): Hidden bit 3 (4): System bit 4 (8): Volume bit 5 (16): Directory bit 6 (32): Archive bit 7 (64): Alias bit 12 (2048): Compressed file Après quelques tests, il s'est avéré que tous mes points de jonction Windows (ex : "Application Data"...) avaient une signature d'attribut de 1046. Par déduction, on trouve 1046 = 1024 + 16 + 4 + 2 ce qui signifie que l'attribut de point de jonction sous Vista est très probablement 1024. On a alors la liste : bit 1 (1): ReadOnly bit 2 (2): Hidden bit 3 (4): System bit 4 (8): Volume bit 5 (16): Directory bit 6 (32): Archive bit 7 (64): Alias bit 11 (1024): <Junction Point ??> bit 12 (2048): Compressed file Suite à quoi, il devient possible de réécrire une fonction vbscript qui calcule la taille d'un répertoire Vista en évitant les points de jonction et qui donc ne plante pas : '-------------------------------- ' calcule récursivement la taille ' d'un dossier en évitant les ' points de jonction vista '-------------------------------- Dim fs, fd Set fs = CreateObject("Scripting.FileSystemObject") Set fd = fs.GetFolder("c:\Users\dupont") msgbox fdSize (fd) '------------------- ' fonction récursive '------------------- Function fdSize(Folder) fdSize = 0 For Each Subfolder in Folder.SubFolders if (Subfolder.Attributes and 1024) = 0 then fdSize = fdSize + fdSize (Subfolder) end if Next For Each f in Folder.files fdSize = fdSize + f.size Next End Function |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com