OVH Cloud OVH Cloud

attendre la fin d'un process avant de continuer code

7 réponses
Avatar
Pascal
bonjour,
j'éfface sur le HDD un dossier je veux ensuite réinitialiser ma listView
en faisant :
With Me.ListView1
.ListItems.Clear
For i = 0 To Me.Dir1.ListCount - 1
s = Mid(Me.Dir1.List(i), InStrRev(Me.Dir1.List(i), "\") + 1)
.ListItems.Add , , s, 1
Next i
Nickel, le seul problème c'est que je retrouve le fichier effacer sur le
HDD, dans ma listView
le temps d'attente est trop court entre l'éffacement et le réaffichage
existe t-il une façon de contraindre XP à attendre la fin de ce process?

merci de vos idées
Pascal

7 réponses

Avatar
Jacques93
Bonjour Pascal,
Pascal a écrit :
bonjour,
j'éfface sur le HDD un dossier je veux ensuite réinitialiser ma listView
en faisant :
With Me.ListView1
.ListItems.Clear
For i = 0 To Me.Dir1.ListCount - 1
s = Mid(Me.Dir1.List(i), InStrRev(Me.Dir1.List(i), "") + 1)
.ListItems.Add , , s, 1
Next i
Nickel, le seul problème c'est que je retrouve le fichier effacer sur le
HDD, dans ma listView
le temps d'attente est trop court entre l'éffacement et le réaffichage
existe t-il une façon de contraindre XP à attendre la fin de ce process?




Peut être en ajoutant :

Me.Dir1.Refresh

entre la suppression du dossier, et l'actualisation du Listview.

--
Cordialement,

Jacques.
Avatar
Pascal
Bonsoir jacques,
malheureusement j'avais déjà essayé Me.dir1.refresh sans succès
merci de l'idée
Pascal

"Jacques93" a écrit dans le message de news:

Bonjour Pascal,
Pascal a écrit :
> bonjour,
> j'éfface sur le HDD un dossier je veux ensuite réinitialiser ma listView
> en faisant :
> With Me.ListView1
> .ListItems.Clear
> For i = 0 To Me.Dir1.ListCount - 1
> s = Mid(Me.Dir1.List(i), InStrRev(Me.Dir1.List(i), "") + 1)
> .ListItems.Add , , s, 1
> Next i
> Nickel, le seul problème c'est que je retrouve le fichier effacer sur le
> HDD, dans ma listView
> le temps d'attente est trop court entre l'éffacement et le réaffichage
> existe t-il une façon de contraindre XP à attendre la fin de ce process?
>

Peut être en ajoutant :

Me.Dir1.Refresh

entre la suppression du dossier, et l'actualisation du Listview.

--
Cordialement,

Jacques.


Avatar
Pascal
bonsoir ai trouvé en changeant le flag
de shfileoperation qui était à FOF_NoConfirmation
par .fFlags = FOF_SIMPLEPROGRESS Or FOF_ALLOWUNDO
cela fonctionne à merveille
merci
Pascal

"Jacques93" a écrit dans le message de news:

Bonjour Pascal,
Pascal a écrit :
> bonjour,
> j'éfface sur le HDD un dossier je veux ensuite réinitialiser ma listView
> en faisant :
> With Me.ListView1
> .ListItems.Clear
> For i = 0 To Me.Dir1.ListCount - 1
> s = Mid(Me.Dir1.List(i), InStrRev(Me.Dir1.List(i), "") + 1)
> .ListItems.Add , , s, 1
> Next i
> Nickel, le seul problème c'est que je retrouve le fichier effacer sur le
> HDD, dans ma listView
> le temps d'attente est trop court entre l'éffacement et le réaffichage
> existe t-il une façon de contraindre XP à attendre la fin de ce process?
>

Peut être en ajoutant :

Me.Dir1.Refresh

entre la suppression du dossier, et l'actualisation du Listview.

--
Cordialement,

Jacques.


Avatar
Jacques93
Bonjour Pascal,
Pascal a écrit :
bonsoir ai trouvé en changeant le flag
de shfileoperation qui était à FOF_NoConfirmation
par .fFlags = FOF_SIMPLEPROGRESS Or FOF_ALLOWUNDO
cela fonctionne à merveille
merci
Pascal



Content pour toi :-) . Mais, par simple curiosité, pourquoi utilise tu
l'API SHFileOperation ? Avant d'envoyer le message concernant le
Refresh, j'ai testé, et c'est OK. Par contre, j'ai utilisé rmdir pour
supprimer le répertoire.

--
Cordialement,

Jacques.
Avatar
Pascal
bonsoir jacques
voici ce que je faisais et qui ne fonctionnait pas
Si je te comprend bien il serait plus simple d'utiliser rmdir?
Bien à toi
Pascal

========================================== Dim rep
Dim i
rep = MsgBox("vous avez choisi de supprimer :" & vbCrLf & _
Me.ListView1.ListItems(ListView1.selectedItem.Index) &
vbCrLf & vbCrLf & _
"Vous confirmez ce choix ?", vbYesNo, "Suppression ")
If rep = vbYes Then
'suppression
'========= Dim RC As Long
Dim FileOper As SHFILEOPSTRUCT
With FileOper
.hwnd = .hwnd
.wFunc = FO_DELETE
.pFrom = App.Path & DirectoryPrincipal & "" & _
Me.ListView1.ListItems(ListView1.selectedItem.Index)
& vbNullChar & vbNullChar
.fFlags = FOF_NOCONFIRMATION

RC = SHFileOperation(FileOper)
End With

'======================================== 'Réinitialiser la liste des dossiers
Me.Dir1.Path = App.Path & DirectoryPrincipal
With Me.ListView1
.ListItems.Clear
For i = 0 To Me.Dir1.ListCount - 1
s = Mid(Me.Dir1.List(i), InStrRev(Me.Dir1.List(i), "")
+ 1)
.ListItems.Add , , s, 1
Next i

=================================================== > Content pour toi :-) . Mais, par simple curiosité, pourquoi utilise tu
l'API SHFileOperation ? Avant d'envoyer le message concernant le
Refresh, j'ai testé, et c'est OK. Par contre, j'ai utilisé rmdir pour
supprimer le répertoire.


Avatar
Pascal
REbonsoir Jacques
j'ai testé, évidemment moins de code mais petit soucis en faisant comme ceci
le problème est toujours présent entre le kill et le rmdir
si j'insère un msgbox entre les deux là OK, suggestion?
Bien à toi

Pascal
----------------------------------------------------------------------------
---------------
Kill (App.Path & DirectoryPrincipal & "" &
Me.ListView1.ListItems(ListView1.selectedItem.Index) & "*.*")
RmDir (App.Path & DirectoryPrincipal & "" &
Me.ListView1.ListItems(ListView1.selectedItem.Index))




"Jacques93" a écrit dans le message de news:
#
Bonjour Pascal,
Pascal a écrit :
> bonsoir ai trouvé en changeant le flag
> de shfileoperation qui était à FOF_NoConfirmation
> par .fFlags = FOF_SIMPLEPROGRESS Or FOF_ALLOWUNDO
> cela fonctionne à merveille
> merci
> Pascal

Content pour toi :-) . Mais, par simple curiosité, pourquoi utilise tu
l'API SHFileOperation ? Avant d'envoyer le message concernant le
Refresh, j'ai testé, et c'est OK. Par contre, j'ai utilisé rmdir pour
supprimer le répertoire.

--
Cordialement,

Jacques.


Avatar
Jacques93
Bonsoir Pascal,
Pascal a écrit :
bonsoir jacques
voici ce que je faisais et qui ne fonctionnait pas
Si je te comprend bien il serait plus simple d'utiliser rmdir?
Bien à toi
Pascal




Non, pas sur, je me posais juste la question. Les API sont en général
plus rapides, mais on en oublie parfois les fonctions de VB, donc faut
faire comme Jean-Marc le fait très bien, des tests, des benchmarks,
comparer les fonctionnalités, etc... A toi de jouer :-)

Et de juger de la méthode la plus appropriée, il n'y pas de règles
absolues en ce domaine.

--
Cordialement,

Jacques.