Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour tout le monde,
j'ai donc une liste de dossier que je parcours, je supprime leur contenu, et je veux ensuite supprimer le dossier lui même lorsqui'il est vide, mais il n'est a priori pas possible de le faire lorque c'est le répertoire en cours.. j'ai testé un changeDirectory mais sans résultat..
Quelqu'un aurait trouvé une alternative?
Merci
Hors ligne
Function boolean RemoveDirectoryA (ref string directoryname) library "KERNEL32.DLL"
Function boolean SetCurrentDirectoryA (ref string directoryname ) library "KERNEL32.DLL"
Hors ligne
oui oui j'ai deja tout ca ^^
Hors ligne
bah ca marche alors !
il suffit de faire
SetCurrentDirectoryA ("c:\")
puis RemoveDirectoryA ("ton repertoire")
A++
Hors ligne
SetCurrentDirectoryA je peux pas le remplacer par un changeDirectory ?
Hors ligne
non.
il faut utiliser le SetCurrentDirectoryA.
A++
Hors ligne
oki merci tu peux mettre en résolu alors ^^
Hors ligne
oky doky !
no soucy man
t'es sur que je peux ?
Hors ligne
ouiiiii fais toi plaisir allezzzzzzz vas yyyyyy
Hors ligne
petite modification :
ca ne fonctionne pas , voici mon code tout simple :
ls_new_directory = "c:\" lb_test_retour= SetCurrentDirectoryA(ls_new_directory) ls_test= GetCurrentDirectory ( ) lb_test_retour=RemoveDirectoryA(a_repertoire)
Hors ligne
chez moi ca fonctionne !
j'ai crée le repertoire c:\tutu
je me positionne sous ce repertoire
puis je vais à la racine c:\
et je supprime le repertoire créé.
et comme par un tour de magie, il disparait. (comme si j'avais englouti un hamburger...)
Function boolean RemoveDirectoryA (ref string directoryname) library "KERNEL32.DLL" Function boolean SetCurrentDirectoryA (ref string directoryname ) library "KERNEL32.DLL" FUNCTION long GetCurrentDirectoryA( long length , ref string path) LIBRARY "Kernel32"
string ls_new_directory, ls_directory string ls_path long ll_ret ls_path = Space(250) ll_ret = GetCurrentDirectoryA(250, ls_path) IF ll_ret > 0 THEN ls_path = Left(ls_path,ll_ret) MessageBox("", ls_path) ELSE Messagebox("Error","Err GetCurrentDirectory " + String(ll_ret)) END IF ls_new_directory = "c:\tutu" ls_directory = "c:\tutu" SetCurrentDirectoryA(ls_new_directory) ll_ret = GetCurrentDirectoryA(250, ls_path) IF ll_ret > 0 THEN ls_path = Left(ls_path,ll_ret) MessageBox("", ls_path) ELSE Messagebox("Error","Err GetCurrentDirectory " + String(ll_ret)) END IF ls_new_directory = "c:\" SetCurrentDirectoryA(ls_new_directory) RemoveDirectoryA(ls_directory)
Hors ligne
oui mais mon mien il est ouvert par un FindFirstFileA ca y jou non ?
Hors ligne
???
essayes de suivre les consignes.
je ne comprends rien à ton firstmachinchouette.
on parle de repertoire, pas de fichier.
et pour pouvoir supprimer le repertoire, il faut qu'il ne contienne pas de fichiers...
j'ai fait le test sur un repertoire vide, et ca fonctionne parfaitement !
Hors ligne
oui oui j'ai essayé, mais en fait je fait un parcour récurssif des dossiers dans des dossier donc je cré une liste avec FindFirstFileA voila:)
Hors ligne
As-tu bien fait un FindClose (je ne me souviens plus du nom exact) après tes FindFirst / FindNext ? Sinon le répertoire reste verrouillé, je me suis déjà fait avoir comme ça.
Hors ligne
oui c'est bien un findclose j'ai testé mais il me semble que ca ne marche pas je reteste, merci !
en fait je le faisais deja :
lu_retour_close = FindClose(lu_retour_find) ls_new_directory = "c:\" lb_test_retour= SetCurrentDirectoryA(ls_new_repertoire) lb_test_retour=RemoveDirectoryA(a_repertoire)
Dernière modification par thezerg (13-12-2006 14:31:50)
Hors ligne
Et tous les fichiers sont bien supprimés ? Il ne reste pas de fichiers cachés/systèmes (genre desktop.ini, thumbs.db ou autres) qui ne sont pas pris en compte dans les critères que tu utilise avec FindFirst/Next ? Tu arrives à supprimer le répertoire à la main ?
Hors ligne
oui je pense qu'il ne reste rien puisque si je tente un remove_directory tout simple en dehors de ca ca marche :s
Hors ligne
j'ai redémarré PB et miracle.. ca marche.. désole
mais merci quand meme à tous!
Hors ligne
thezerg a écrit:
j'ai redémarré PB et miracle.. ca marche.. désole
mais merci quand meme à tous!
Probablement qu'il a raté un FindClose à un moment donné, à cause d'un debug interrompu par exemple. Où alors parce que tu n'avais pas toute de suite ces FindClose dans le code et donc que le système a gardé un verrou sur le répertoire.
Hors ligne
oui c'est possible
Hors ligne