Page 1 sur 1

[RESOLU] DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 18:40
par omega
Salut à tous et bonne année 2018 et très bonne fête !
J'ai une ListIconGadget qui contient la liste des répertoires à supprimer. Pour supprimer un répertoire, il suffit de cocher sa case.
Le problème c'est que rien ne s'efface... Pourquoi??
Merci

Code : Tout sélectionner

For wrow=0 To CountGadgetItems(#main_grid)-1
    If GetGadgetItemState(#main_grid,wrow) =#PB_ListIcon_Checked
       dossier$=GetGadgetItemText(#main_grid,wrow)
       dir$=GetCurrentDirectory()+ dossier$
       DeleteDirectory(dir$,"",#PB_FileSystem_Force | #PB_FileSystem_Recursive)
    EndIf     
Next wrow
MessageRequester("Terminé","Suppression terminée ! ")

Re: DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 19:52
par Zorro
en remplaçant

Code : Tout sélectionner

dir$=GetCurrentDirectory()+ dossier$
par

Code : Tout sélectionner

dir$=dossier$
??

parce que avec "GetCurrentDirectory()" tu forces a ce que tes dossiers soient dans le meme dossier que ton prg ...
ne sachant pas ce que tu veux faire , et ne connaissant pas l'arborescence de tes fichiers, je suppute !

Re: DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 20:20
par omega
Mon programme se trouve dans le même répertoire que le dossier à supprimer. J'ai ajouté GetCurrentDirectory() apès avoir testé justement dossier$ tout court. Toujours même résultat.

Re: DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 20:25
par Zorro
Windows peut bloquer l'ecriture
si un fichiers se trouvant dans ton dossier a effacer est "ouvert"..
une voie a suivre ?

Re: DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 21:12
par omega
@Zorro ! ça y est j'ai trouvé ! Je ne sais pas si tu le sais mais je viens de découvrir qq chose de bizarre .... chose que je ne savais pas et peut être même bon nombre de pubistes l'ignorent ....

Regardes: voici 2 dossiers présents au même titre que le programme, nommés respectivement dx23 et 102017.
Si on veut supprimer ces 2 dossiers et bien voici ce qui se passera:

le dossier dx23 sera supprimé le plus normalement du monde
mais le dossier 102017 ne sera pas supprimé !

Conclusion: DeleteDirectory() n'a aucun effet sur les dossiers dont le nom est formé de caractères numériques.... C'est exactement ce que je viens de remarquer Zorro!

Merci et excellente fin d'année !

Re: DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 21:35
par Zorro
je savais qu'il y avait des nom reservé par windows pour les dossiers

par exemple : "con,AUX,LPT1,LPT2,LPT3 etc... " pour les chiffres, je ne savais pas :)

Re: DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 21:47
par omega
Attends Zorro ! Ce n'est pas évident ce que je viens de dire, bien que j'ai testé avant de déclarer ce que j'ai dit. J'ai bien réussi à supprimer le 1er dossier mais pas le 2ème. J'ai renommé mon dossier (manuellement) puis je l'ai supprimé. Voilà que maintenant je me retrouve encore une fois au point ZERO. Le problème n'est pas tout à fait réglé...

Peut être que la fermeture des fichiers (en fait c'est des bases de données qui sont présentes dans le dossier à supprimer)

je vais essayer d'exécuter l'instruction avant d'ouvrir les bases de données .. . Voyons ce que ça donne...

Re: DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 21:53
par omega
Oui effectivement comme tu le disais Zorro, il faut que tous les fichiers soient fermés pour que DeleteDirectory() marche.

Je viens de le tester et ça marche ! Je le confirme !

Merci encore et à l'année prochaine !......

Re: [RESOLU] DeleteDirectory() ne supprime rien !

Publié : dim. 31/déc./2017 22:19
par Zorro
Bonne Année a toi :)

Re: [RESOLU] DeleteDirectory() ne supprime rien !

Publié : lun. 01/janv./2018 10:15
par Marc56
Sous Windows ou Dos, ou n'importe quel OS, on ne peut supprimer un dossier si on a le pied dessus (= un programme est ouvert dedans, même si c'est simplement le dossier qui est ouvert avec aucun fichier dedans)
L'explorateur ou certains programmes comme TC peuvent le faire, mais pas le shell (command.com ou cmd.exe)

Code : Tout sélectionner

CreateDirectory("C:\Tmp")
SetCurrentDirectory("C:\tmp")
CreateDirectory("dx23")
CreateDirectory("102017")

DeleteDirectory("dx23", "*")

SetCurrentDirectory("102017")
Debug DeleteDirectory("102017", "*")
; On ne peut supprimer ce rép puisqu'on est dedans

SetCurrentDirectory("C:\tmp")
Debug DeleteDirectory("102017", "*")
; Là c'est ok car on est remonté au niveau au dessus
Note: Cette notion explique pourquoi, pour parcourir un répertoire (= aller dedans) il faut lui mettre l'attribut +x (exécutable)

Bonne année

:wink:

Re: [RESOLU] DeleteDirectory() ne supprime rien !

Publié : mar. 02/janv./2018 19:43
par omega
@Marc56

Merci pour ces infos marc, je voulais juste confirmer que le dossier 'exemple Dos1' à supprimer se trouve dans le dossier principal (Dossier) dans lequel se trouve mon programme:
d:\Dossier\
- MonProgramme.pb
- Dos1\
- etc...


BONNE ANNEE !