Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| DIR_CHANGE: message d'erreur "Unknown directory" | |
| | Auteur | Message |
---|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: DIR_CHANGE: message d'erreur "Unknown directory" Jeu 29 Nov 2012 - 14:22 | |
| Bonjour, J'ai réalisé une procédure qui permet de récupérer la liste de tous les fichiers portant une certaine extension. voici le code: - Code:
-
WIDTH 0,SCREEN_X/2 MEMO 100 : BAR_BOTH 100 WIDTH 100,WIDTH(0)-20 HEIGHT 100,HEIGHT(0)-80 DIM a$ a$="C:\WINDOWS" ' j'ai recomposé le chemin dans un répertoire test et cela fonctionne ' a$="C:\test\WINDOWS\system32\spool\drivers\w32x86\3\Xerox\Product Data\Public\DCPs\x2DNORH8\V5.0" DIR_LIST(100,a$,".txt") MESSAGE "Fini !"
END
SUB DIR_LIST(output%,rep$,ext$) IF VARIABLE("DIRLIST_i%")=0 DIM DIRLIST_i%:getObjectId%(ADR(DIRLIST_i%)):DLIST DIRLIST_i% DIM DIRLIST_f$,DIRLIST_s$:DIRLIST_s$=DIR_CURRENT$ END_IF CAPTION 0,STR$(COUNT(DIRLIST_i%))+" "+DIR_CURRENT$
IF DIR_EXISTS(rep$)=1 DIR_CHANGE rep$ DIRLIST_f$=FILE_FIND_FIRST$ WHILE DIRLIST_f$<>"_" IF DIR_EXISTS(DIRLIST_f$)=1 ITEM_ADD DIRLIST_i%,DIRLIST_f$ DIR_LIST(output%,DIR_CURRENT$+"\"+DIRLIST_f$,ext$) DIR_CHANGE ".." DIRLIST_f$=FILE_FIND_FIRST$ WHILE DIRLIST_f$<>ITEM_READ$(DIRLIST_i%,COUNT(DIRLIST_i%)):DIRLIST_f$=FILE_FIND_NEXT$:END_WHILE ITEM_DELETE DIRLIST_i%,COUNT(DIRLIST_i%) ELSE IF ext$<>"" IF FILE_EXTRACT_EXTENSION$(DIRLIST_f$)=ext$ THEN ITEM_ADD output%,DIR_CURRENT$+"\"+DIRLIST_f$ ELSE ITEM_ADD output%,DIR_CURRENT$+"\"+DIRLIST_f$ END_IF END_IF DIRLIST_f$=FILE_FIND_NEXT$ END_WHILE END_IF IF COUNT(DIRLIST_i%)=0 DIR_CHANGE DIRLIST_s$ DELETE DIRLIST_i% : FREE DIRLIST_i%:FREE DIRLIST_f$:FREE DIRLIST_s$ END_IF END_SUB
SUB getObjectId%(p_r%) DIM_LOCAL i%:i%=1 i% = 1 WHILE OBJECT_EXISTS(i%) = 1 : i% = i% + 1 : END_WHILE POKE p_r%,i% END_SUB Cette procédure fonctionne très bien, sauf dans un cas particulier: Si je fais une recherche dans le répertoire "C:\Windows" le programme commence à parcourir l'ensemble des répertoires et à un moment donné, lorsqu'il arrive sur le répertoire : - Code:
-
C:\WINDOWS\system32\spool\drivers\w32x86\3\Xerox\Product Data\Public\DCPs\x2DNORH8\V5.0 le programme plante avec le message d'erreur : - Code:
-
Unknown directory. Line : 32 qui correspond à cette ligne : IF DIR_EXISTS(rep$)=1 DIR_CHANGE rep$ DIRLIST_f$=FILE_FIND_FIRST$
Et je n'arrive pas à savoir pourquoi... Le répertoire en question existe bien, il n'est pas caché et apparemment n'a pas d'attributs particuliers... (ce n'est pas un lien symbolique) C'est d'autant plus étonnant que le test juste avant (le DIR_EXISTS) passe très bien... Quelqu'un aurait une idée ?... (je précise que Panoramic_editor est à jour) Si quelqu'un pouvait faire le test sur son répertoire Windows et qu'un message similaire arrive, on pourrait peut être en tirer quelque chose... EDIT : c'est d'autant plus gênant que si on ne peut pas se fier au résultat de DIR_EXISTS, je ne vois pas comment résoudre le problème... @Jack : dans quel cas, ce message apparait alors que DIR_EXISTS me renvoi 1 ?
Dernière édition par Nardo26 le Jeu 29 Nov 2012 - 14:44, édité 1 fois | |
| | | Invité Invité
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Jeu 29 Nov 2012 - 14:39 | |
| Bonjour, Je viens d'essayer ton programme. Déjà au départ, j'arrive directement au message "fini!" Donc j'ai regardé, et le dossier: W32X86 est vide. Donc j'ai effacé progressivement en arrière, et j'ai eu un blocage sur PRINTER avec ton message d'erreur. J'ai donc avec l'explorer regardé où j'en étais, et là j'ai eu le message suivant: vous ne disposez pas des droits pour ... etc, message que tout le monde connait sous W7. J'ai donné l'autorisation de lire ce dossier qui est d'ailleur vide. J'ai relancé le programme, et je n'ai plus eu cette erreur.
|
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Jeu 29 Nov 2012 - 14:48 | |
| Meci cosmos, Le problème c'est que je n'ai pas de message d'erreur concernant un droit d'accès particulier sur ce répertoire (je suis sous XP en "super-user", c'est pas tout à fait administrateur mais pas loin... ) Si tu fais carrément une recherche à partir de "C:\Windows", en dehors de ces fameux message de droits d'accès, tu ne rencontre pas de "Directory Unknown" ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Jeu 29 Nov 2012 - 20:47 | |
| Il se peut que le répertoire existe, mais que tu n'ais pas les droits pour pouvoir l'ouvrir ... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Jeu 29 Nov 2012 - 20:56 | |
| Je me demande s'il n'y aurait pas une solution pour empêcher cette demande d'autorisation sous W7 ???
Soit par Panoramic, soit par une intervention dans les options des dossiers de W7.
Je suis sous XP (Administrateur) je n'ai donc pas ce problème.
A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 2:19 | |
| Salut tout le monde. Je suis sous XP, et j’ai la même chose que Nardo26 : ça fonctionne avec les autres répertoires, mais avec c:\Windows, erreur Unknown directory. J’ai réalisé le code suivant qui fait à peu-près la même chose mais en utilisant la commande MS-DOS DIR. - Code:
-
' Dir_liste.bas ' Permet de lister tous les fichiers portant une extension précise ' d'un répertoire quelconque et de ses sous-répertoirs
dim out$ : out$ = "D:\dirtext.txt" : ' Fichier crée par la commande MS-DOS DIR dim f$ ,lign$ ,ext$ : ext$ = "*.txt" : ' Extension des fichiers à lister dim rep$ : rep$ = "c:\windows\" : ' Répertoire et ses sous-répertoires à lister dim memo% : memo% = 100 width 0,650 : height 0, 550 : MEMO memo% : BAR_BOTH memo% WIDTH memo%,600 : HEIGHT memo%,500
Dir_Liste(memo%,out$,ext$) message "Terminé" end ' ****************************************************************************** ' Dans la commande MS-DOS Dir ' le paramètre /a pour Attribut ' le paramètre /s pour Sous-répertoires ' le symbole > (redirection) : la sortie de la commande DIR se fait dans ' le fichier out$, c.à.d "D:dirtext.txt" et non sur l'écran DOS ' ****************************************************************************** SUB Dir_Liste(memo%,out$,ext$) EXECUTE_WAIT "CMD.exe /c dir " + rep$ + ext$+"/a/s >" + out$ if file_exists(out$) = 1 file_open_read 1, out$ while file_eof(1) <> 1 file_readln 1,lign$ item_add memo%,lign$ end_while end_if file_close 1 file_delete out$ : ' Supprimer le fichier de sortie END_SUB ' ******************************************************************
Remarque : le texte affiché perd ses accents !
Dernière édition par papydall le Ven 30 Nov 2012 - 17:23, édité 2 fois (Raison : Correction) | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 4:23 | |
| - Jicehel a écrit:
- Il se peut que le répertoire existe, mais que tu n'ais pas les droits pour pouvoir l'ouvrir ...
Le problème c'est qu' apparemment sous XP j'ai les droits puisque sous l'explorateur j'arrive sans problème à l'ouvrir et à aucun moment je n'ai eu le moindre message concernant des droits d'accès... Je viens de relancer un test sous Seven : J'ai le même problème dès que j'arrive sur un dossier dont l’icône indique qu'il est verrouillé (avec cadenas). Donc il doit bien y avoir une histoire de droits d'accès... Peut être parce que le processus Panoramic.exe n'est pas exécuté avec des droits d'administration ?... Toujours est-il qu'il manque peut être une instruction qui permettrai de tester ce chmilblik.... Peut être qu'avec le couple d'instruction try/catch ou ERROR_OFF on pourrait faire quelque chose... car je me vois mal de lancer un icacls dans une fenêtre DOS pour chaque répertoire... Sans compter qu'il faudrait avoir la possibilité de savoir si on a affaire à une jonction (ce que j’appelle aussi un lien symbolique)... Pour avoir une idée du nombre de jonction, tapez cette commande dans une fenêtre DOS : - Code:
-
dir c:\ /s /al note : faut pas être pressé pour obtenir tous les résultats... sur mon portable par ex (win7) j'ai 76 jonctions ! Un article intéressant ici : http://fspsa.free.fr/recursivite.htm et ici : http://fspsa.free.fr/jonctions.htmComme quoi, il faut faire très attention à ce que l'on fait... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 7:01 | |
| En tout cas, en effet, il faudrait sans doute une commande type DIR_ATTRIB Nom_rep$ pour récupérer les attributs ou une commande IS_WRITTABLE nom_rep$ et IS_OPENABLE Nom_rep$ un truc du genre quoi ...
Dernière édition par Jicehel le Ven 30 Nov 2012 - 13:11, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 10:36 | |
| Récupérer les attributs ? KGF.dll le fait ! Tu as la fonction GetFileAttributes(adr(nom$)), et la procédure GEtFileAttributes(nom$) dans KGF_SUB.bas. Voici un exemple pour avoir les attributs de C:\Windows\System32. Le programme répond 16 ce qui signifie "dossier". - Code:
-
KGF_initialize("KGF.dll") GetFileAttributes("C:\Windows\System32") message str$(GetFileAttributes%) end
#INCLUDE "KGF_SUB.bas"
Il faut regarder dans la rubrique de gestion des fichiers, dans KGF.chm, pour la doc complète. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 11:14 | |
| Merci Klaus ! Mais j'ai déjà fait cet essai en passant par Kernel32. Voir le code ci-dessous : - Code:
-
dll_on "kernel32.dll" LABEL progExit : ON_ERROR_GOTO progExit
WIDTH 0,SCREEN_X/2 MEMO 100 : BAR_BOTH 100 WIDTH 100,WIDTH(0)-20 HEIGHT 100,HEIGHT(0)-80 DIM a$,r% a$="C:\WINDOWS" ' j'ai recomposé le chemin dans un répertoire test et cela fonctionne ' a$="C:\test\WINDOWS\system32\spool\drivers\w32x86\3\Xerox\Product Data\Public\DCPs\x2DNORH8\V5.0" DIR_LIST(100,a$,".txt") MESSAGE "Fini !" DLL_OFF END
SUB DIR_LIST(output%,rep$,ext$) IF VARIABLE("DIRLIST_i%")=0 DIM DIRLIST_i%:getObjectId%(ADR(DIRLIST_i%)):DLIST DIRLIST_i% DIM DIRLIST_f$,DIRLIST_s$:DIRLIST_s$=DIR_CURRENT$ END_IF ' CAPTION 0,STR$(COUNT(DIRLIST_i%))+" "+DIR_CURRENT$
IF DIR_EXISTS(rep$)=1 LPEEK(ADR(rep$)): ' on récupère l'adresse du début de la chaine de caractères r%=dll_call1("GetFileAttributesA",LPEEK_return%) CAPTION 0,rep$+" Attr:"+STR$(r%) DIR_CHANGE rep$ DIRLIST_f$=FILE_FIND_FIRST$ WHILE DIRLIST_f$<>"_" IF DIR_EXISTS(DIRLIST_f$)=1 ITEM_ADD DIRLIST_i%,DIRLIST_f$ DIR_LIST(output%,DIR_CURRENT$+"\"+DIRLIST_f$,ext$) DIR_CHANGE ".." DIRLIST_f$=FILE_FIND_FIRST$ WHILE DIRLIST_f$<>ITEM_READ$(DIRLIST_i%,COUNT(DIRLIST_i%)):DIRLIST_f$=FILE_FIND_NEXT$:END_WHILE ITEM_DELETE DIRLIST_i%,COUNT(DIRLIST_i%) ELSE IF ext$<>"" IF FILE_EXTRACT_EXTENSION$(DIRLIST_f$)=ext$ THEN ITEM_ADD output%,DIR_CURRENT$+"\"+DIRLIST_f$ ELSE ITEM_ADD output%,DIR_CURRENT$+"\"+DIRLIST_f$ END_IF END_IF DIRLIST_f$=FILE_FIND_NEXT$ END_WHILE END_IF IF COUNT(DIRLIST_i%)=0 DIR_CHANGE DIRLIST_s$ DELETE DIRLIST_i% : FREE DIRLIST_i%:FREE DIRLIST_f$:FREE DIRLIST_s$ END_IF END_SUB
SUB getObjectId%(p_r%) DIM_LOCAL i%:i%=1 i% = 1 WHILE OBJECT_EXISTS(i%) = 1 : i% = i% + 1 : END_WHILE POKE p_r%,i% END_SUB
SUB LPEEK(ad%) IF VARIABLE("LPEEK_return%")=0 THEN DIM LPEEK_return% DIM_LOCAL Value%,i%,Value$,c% Value% = 0 FOR i%=0 TO 3 c%=PEEK(ad%+i%) IF c%<16 : Value$="0"+HEX$(c%)+Value$ ELSE:Value$=HEX$(c%)+Value$:END_IF NEXT i% LPEEK_return% = HEX(Value$) END_SUB
progExit: rep$=DIR_CURRENT$+"\"+DIRLIST_f$ LPEEK(ADR(rep$)): ' on récupère l'adresse du début de la chaine de caractères r%=dll_call1("GetFileAttributesA",LPEEK_return%) MESSAGE "erreur "+rep$+CHR$(13)+"Attr:"+str$(r%) DLL_OFF TERMINATE Le problème, c'est que pour le répertoire qui plante, j'ai un attribut classique (16) et rien d'autre... Le FILE_ATTRIBUTE_REPARSE_POINT n'est pas positionné, donc ce n'est pas un lien... il faut peut être regarder du côté des droits d'accès... et encore je n'en suis pas sûr vu que j'arrive sans problème à ouvrir ce répertoire ainsi que les sous-répertoires qu'il contient avec l'explorateur... EDIT : Peut être avec advapi32.dll:GetSecurityInfo() ? Reste à savoir si on peut l'appeler depuis Panoramic... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 13:15 | |
| Merci à vous deux, j'avais zappé les fonctions de la DLL de Klaus, désolé.
Quand au source de Nardo, il est bien pratique est a sa place dans une librairie sur la gestion de fichiers selon moi car on peut avoir du mal à pondre la même chose tout seul ...
Par contre en effet, ça ne résout pas le problème des droits d'accès de l'utilisateur ou de Panoramic. Normalement, Panoramic devrait avoir les droits de l'utilisateur qui le lance, je pense.
Mais je ne suis peut être pas parti sur la bonne piste, c'était juste une idée pour le problème. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 16:10 | |
| Quelques news : J'ai essayé de récupérer l'attribut "Propriétaire" d'un répertoire. J'y suis presque arrivé : - L'appel à GetFileSecurityA() -> ok - L'appel à GetSecurityDescriptorOwner() -> Ok - L'appel à LookupAccountSid() -> Impossible, pour cette fonction, il faut passer 7 paramètres... Donc j'abandonne... car déjà à la base, passer par des Dll ne me conviens pas, et si en plus il faut en créer une spécialement pour cela, cela ne vaut pas le coup : autant écrire directement en C ou en Delphi la totalité de DIR_LIST (voir même utiliser la commande DIR) Donc le source de DIR_LIST du 1er post est valable uniquement pour parcourir des répertoires classiques... Pour ceux qui veulent jeter un coup d'oeil à mon essai : - Code:
-
DLL_ON "advapi32.dll" DIM OWNER_SECURITY_INFORMATION% : OWNER_SECURITY_INFORMATION% = 1 DIM DACL_SECURITY_INFORMATION% : DACL_SECURITY_INFORMATION% = 4
DIM f$ DIM r% f$="C:\test"
DIM lpnLengthNeeded%,lpFileName% DIM pSecurityDescriptor% DIM buffer$,i%
DIM name$ : name$ = STRING$(201," ") DIM domain$ : domain$ = STRING$(200," ") DIM name_len% : name_len% = 0 DIM domain_len% : domain_len% = 0 DIM pOwner% : pOwner% = 0 DIM deUse% DIM null% : null% = 0 DIM nullStr$
DIM pNullStr%:LPEEK(ADR(nullStr$)):pNullStr%=LPEEK_return% DIM pName%:LPEEK(ADR(name$)):pName%=LPEEK_return% DIM pDomain%:LPEEK(ADR(domain$)):pDomain%=LPEEK_return%
lpnLengthNeeded%=4096 ' définition d'un buffer de lpnLengthNeeded% octets ' pour recevoir le descripteur buffer$=STRING$(lpnLengthNeeded%+1," ") : LPEEK(ADR(buffer$)) : pSecurityDescriptor% = LPEEK_return%
' on récupère l'adresse du début de la chaine de caractères LPEEK(ADR(f$)) : lpFileName%=LPEEK_return%
r% = dll_call5("GetFileSecurityA",lpFileName%,BIN_OR(OWNER_SECURITY_INFORMATION%,DACL_SECURITY_INFORMATION%),pSecurityDescriptor%,lpnLengthNeeded%,ADR(lpnLengthNeeded%)) IF r%<>0 MESSAGE "ok1: "+str$(lpnLengthNeeded%) r% = dll_call3("GetSecurityDescriptorOwner",pSecurityDescriptor%,ADR(pOwner%),adr(null%)) IF r%<>0 MESSAGE "ok2: pOwner "+HEX$(pOwner%)+" result:"+str$(r%)
' A partir d'ici c'est plus possible... ' r%=dll_call7("LookupAccountSid",pNullStr%, pOwner%, pName%, ADR(name_len%), ADR(pDomain%), ADR(domain_len%), ADR(deUse%)) END_IF END_IF
DLL_OFF
END
SUB LPEEK(ad%) IF VARIABLE("LPEEK_return%")=0 THEN DIM LPEEK_return% DIM_LOCAL Value%,i%,Value$,c% Value% = 0 FOR i%=0 TO 3 c%=PEEK(ad%+i%) IF c%<16 : Value$="0"+HEX$(c%)+Value$ ELSE:Value$=HEX$(c%)+Value$:END_IF NEXT i% LPEEK_return% = HEX(Value$) END_SUB | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 17:21 | |
| En effet, là, je pense que c'est à Jack de prendre le relais si ça l'interesse par rapport au sens dans lequel il veut faire évoluer Panoramic. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 17:44 | |
| Salut tout le monde.
@Nardo26 Dans ton programme, SUB DIR_LIST(output%,rep$,ext$) est une routine récursive ! Or, d’après mes tests sur la récursivité, (dans certains cas particuliers) je ne suis pas sûr de son bon comportement, d’autant plus que Jack n’a confirmé ni infirmé l’utilisation de la récursivité. C’est une simple idée qui m’est venue ainsi.
Si on utilise la commande DIR de MS-DOS, tout marche correctement et il n’y a pas de message d’erreur (voir mon code publié ci-haut). En plus, je ne crois pas à une question de droit d’accès, mais je me trompe peut-être.
| |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" Ven 30 Nov 2012 - 23:00 | |
| @Papydall : Pour DIR_LIST au sujet de la récursivité C'est la façon dont sont gérés les DIM locaux qui pose problème. Je n'en utilise pas, tout passe par une DLIST comme pile de passage de paramètre et des variables globales. Donc pas de soucis dans ce cas bien particulier... Sinon je m'en serait déjà rendu compte lorsque j'ai réalisé la librairie AVL... | |
| | | Contenu sponsorisé
| Sujet: Re: DIR_CHANGE: message d'erreur "Unknown directory" | |
| |
| | | | DIR_CHANGE: message d'erreur "Unknown directory" | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |