| DIR_REMOVE récalcitrant... | |
|
|
Auteur | Message |
---|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: DIR_REMOVE récalcitrant... Jeu 6 Sep 2012 - 11:40 | |
| Bonjour à tous ! Quelqu'un peut m'expliquer pourquoi la commande DIR_REMOVE ne fonctionne pas dans le programme ci-dessous ? Condition de départ: - Code:
-
C:\test │ ├─(dossier1) │ │ │ ├ texte1.txt │ └ texte2.txt │ ├─(dossier2) │ │ │ └ texte6.txt │ ├─texte3.txt └ texte4.txt On passe dans le dossier1, on supprime les 2 fichiers texte. puis on revient dans c:\test et on réalise un DIR_REMOVE de dossier1. Résultat : le répertoire "dossier1" existe toujours !!!!ATTENTION : Ne virez pas le STOP présent dans le source sinon vous partirez dans une boucle infernale... - Code:
-
LABEL Efface_File2,Bcl
DIM Lecteur$:Lecteur$="D:\"
DIM D_efface$, a$,b$
MEMO 1:WIDTH 1,WIDTH(0)-10 HEIGHT 1,HEIGHT(0)-100 BUTTON 2:TOP 2,HEIGHT(0)-90:LEFT 2,10:CAPTION 2,"Go !" ON_CLICK 2,Efface_File2
D_efface$=Lecteur$+"test"
' création des repertoires et fichiers pour le test IF DIR_EXISTS(Lecteur$+"test")=0 DIR_MAKE Lecteur$+"test" DIR_MAKE Lecteur$+"test\dossier1" DIR_MAKE Lecteur$+"test\dossier2" ELSE IF DIR_EXISTS(Lecteur$+"test\dossier1")=0 THEN DIR_MAKE Lecteur$+"test\dossier1" IF DIR_EXISTS(Lecteur$+"test\dossier2")=0 THEN DIR_MAKE Lecteur$+"test\dossier2" END_IF IF FILE_EXISTS(Lecteur$+"test\texte4.txt")=0 FILE_OPEN_WRITE 1,Lecteur$+"test\texte3.txt":FILE_CLOSE 1 FILE_OPEN_WRITE 1,Lecteur$+"test\texte4.txt":FILE_CLOSE 1 FILE_OPEN_WRITE 1,Lecteur$+"test\dossier1\texte1.txt":FILE_CLOSE 1 FILE_OPEN_WRITE 1,Lecteur$+"test\dossier1\texte2.txt":FILE_CLOSE 1 FILE_OPEN_WRITE 1,Lecteur$+"test\dossier2\texte6.txt":FILE_CLOSE 1 END_IF
END
Efface_File2: dir_change D_efface$ ITEM_ADD 1,"DIR_CHANGE "+D_efface$ a$=FILE_FIND_FIRST$ REPEAT REPEAT Bcl: ' laissez ce STOP sinon vous allez partir dans une boucle infernale... STOP if dir_exists(a$)=1 ITEM_ADD 1,"DIR_CHANGE "+a$ dir_change a$ a$=FILE_FIND_FIRST$ ELSE IF a$<>"_" ITEM_ADD 1,"FILE_DELETE "+a$ file_delete a$ a$= FILE_FIND_NEXT$ END_IF END_IF UNTIL a$="_" IF DIR_CURRENT$<>D_efface$ b$=DIR_CURRENT$ DIR_CHANGE ".." ITEM_ADD 1, "DIR_CHANGE .. -> (DIR_CURRENT$="+DIR_CURRENT$+")" ' C'est cette ligne qui ne marche pas... DIR_REMOVE b$ : ITEM_ADD 1,"DIR_REMOVE "+b$ a$= FILE_FIND_FIRST$: IF a$<>"_" THEN GOTO Bcl END_IF UNTIL DIR_CURRENT$=D_efface$ a$ = file_find_first$ if a$="_" then return repeat if dir_exists(a$)=0 file_delete a$ ITEM_ADD 1,"FILE_DELETE "+a$ end_if a$=file_find_next$ until a$="_" return | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DIR_REMOVE récalcitrant... Jeu 6 Sep 2012 - 11:45 | |
| Essaye de temporiser après la suppression (avec un petit wait 1000, par exemple), ça devrait le faire (je ne peux pas tester depuis le boulot...) | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 6 Sep 2012 - 12:20 | |
| @ Nardo,J'ai rencontré le Pb en voulant éliminer le dossier complet au lieu de fichier/fichier mais je n'ai pas insisté sur le sujet car dans la doc , il est écrit que le dossier doit être vide. Edit : il manque le message d'erreur quand le dossier contient un fichier et la spécification dans la doc pour les cas d'erreur
rmdir, c'est pareil@ Jack,deux commandes qui font la même chose ...mouep pourquoi pas... mais ne serait il pas possible que l'une des deux puisse détruire un dossier même si il contient des fichiers... cela éliminerait quelques lignes de code dans les sources... | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_REMOVE récalcitrant... Jeu 6 Sep 2012 - 12:49 | |
| - Jicehel a écrit:
- Essaye de temporiser après la suppression (avec un petit wait 1000, par exemple), ça devrait le faire (je ne peux pas tester depuis le boulot...)
Bonjour Jicehel, Si je tapes les commandes en "dur", sans aucune pause, wait, message ou autre, cela fonctionne... Donc c'est vraiment lié avec mon code... mais je ne vois pas où... Les ITEM_ADD dans le memo permettent de voir pour où passe le programme et je ne vois pas la faille. Je ne dis pas qu'il n'y a pas des bugs (c'est même sûr qu'il y en a) mais l'execution de DIR_REMOVE est confirmé mais je ne constate pas de résultat... | |
|
| |
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_REMOVE récalcitrant... Jeu 6 Sep 2012 - 14:41 | |
| Salut Nardo 26 Tu as dit toi-même qu’il ne faut pas supprimer le STOP. Donc il y a une boucle infinie ce qui veut dire que la boucle REPEAT … UNTIL n’en finit pas : la condition de sortie ne sera jamais réalisée. Ligne 64 il faut changer FIRST$ par NEXT$ - Code:
-
a$= FILE_FIND_next$: IF a$<>"_" THEN GOTO Bcl
Tu peux maintenant virer le stop de la ligne 45 : la boucle se termine bien et le 2 fichiers texte3.txt et texte4.txt sont effacés. | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_REMOVE récalcitrant... Jeu 6 Sep 2012 - 15:21 | |
| C'est volontairement que j'utilise FILE_FIND_FIRST.... pour être sûr de pointer (après supression) sur le 1er élément en cours de DIR_CURRENT$
Il y a une boucle infinie parce que DIR_REMOVE ne supprime pas mon dossier donc FILE_FIND_FIRST pointe indéfiniment sur le 1er dossier rencontré...
Je ne sais pas ce que contient un FILE_FIND_NEXT après un DIR_REMOVE... on ne saute pas des fichiers/repertoires ?
| |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_REMOVE récalcitrant... Jeu 6 Sep 2012 - 19:26 | |
| Personne a une idée ?... @papydall : c'est pas les FILE_DELETE qui posent problème. Même si la condition pour sortir de la boucle n'est pas bonne, je sais que c'est buggé, il n'en reste pas moins que le DIR_REMOVE ne se réalise pas. Pourtant le répertoire est vide et la commande est correcte (cf le ITEM_ADD dans le mémo..) PS : J'ai rajouté des FILE_FIND_CLOSE (car je pensai que cela pouvait venir de là) à chaque fois que je quitte un répertoire, suivi de FILE_FIND_FIRST : pas d'amélioration... | |
|
| |
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_REMOVE récalcitrant... Ven 7 Sep 2012 - 2:53 | |
| Je pense a un bug. Voir ici | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DIR_REMOVE récalcitrant... Ven 7 Sep 2012 - 4:45 | |
| Je confirme : c'est bien un bug... Encore merci papydall : j'arrête de me triturer les méninges... | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: DIR_REMOVE récalcitrant... Dim 8 Sep 2013 - 17:09 | |
| Le problème avec FILE_FIND_FIRST$ est résolu dans PANORAMIC V 0.9.25i4 | |
|
| |
Contenu sponsorisé
| Sujet: Re: DIR_REMOVE récalcitrant... | |
| |
|
| |
| DIR_REMOVE récalcitrant... | |
|