Salut tout le monde
Suite au sujet « DIR_REMOVE récalcitrant… » relevé par Nardo26 dans la rubrique « A l’aide !.. », J’ai beaucoup étudié le code qu’il a publié pour essayer de comprendre le problème.
Voici mon diagnostic :
Je crois qu’il existe un vrai bug avec FILE_FIND_FIRST$.
Cette source de recherche une fois ouverte, ne peut plus être fermée même pas par FILE_FIND_CLOSE.
Conséquence : il n'est plus possible de supprimer un dossier bien qu'il soit vide, parce qu'il est utilisé par cette source qui ne veut plus le libérer !
Le code suivant comporte 3 sous-programmes : cree_dossier, efface_fichier et supprime_dossier.
Cree_dossier : crée un dossier « test » sur le disque « D : ». Ce dossier est évidement vide.
Efface_fichier : efface les éventuels fichiers contenus dans le dossier « test ».
Supprime_dossier : doit supprimer le dossier vide « test ».
Si on n’exécute pas la ligne 16 : a$ = file_find_first$, le dossier « test » sera supprimé en exécutant le sous-programme « supprime_dossier ».
Si la ligne 16 est exécutée, il sera impossible de supprimer le dossier !
Pour moi c’est un bug !
Voici le code
- Code:
-
dim a$
label cree_dossier, efface_fichier, supprime_dossier
gosub cree_dossier
gosub efface_fichier
gosub supprime_dossier
message "terminé"
terminate
end
cree_dossier:
if dir_exists("d:\test") = 0 then dir_make "d:\test"
return
efface_fichier:
dir_change "d:\test"
' si la ligne suivante (ligne 20) est en REM tout va bien : le dossier sera supprimé
' sinon, rien ne vas plus : le fichier reste "prisonnier" de la source de recherche
' et ne peut plus être supprimé!
a$ = file_find_first$ : ' cette source de recherche une fois ouverte, ne peut
' plus être fermée même pas par FILE_FIND_CLOSE
' Conséquence : il n'est plus possible de supprimer
' le dossier bien qu'il soit vide, parce qu'il est
' utilisé par cette source.
' while a$ <> "_"
' file_delete a$
' a$ = file_find_next$
' end_while
file_find_close
return
supprime_dossier:
dir_change ".."
rmdir "d:\test"
return