Comment déterminer si un fichier est utilisé par un processus?
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
21 mai 2008 à 15:32
ShareVB -
7 juil. 2008 à 19:51
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 21 mai 2008 à 18:38
Salut,
ça a l'air bien^^, mais c'est du VB6, j'ai essayé de le faire bouffer par VS (qui a essayé de le convertir) mais ça me fait un truc horrible. Je vais essayer d'arranger ça, si vous avez autre chose, c'est avec plaisir
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 22 mai 2008 à 11:20
Salut,
ça ne fonctionne pas, j'ai du faire plusieurs erreur en corrigeant les bug et ça ne donne rien. Par contre:
vous savez tous que quand on veux supprimé un fichier et qu'il est utilisé pas un programme, on a un message d'erreur. Comment puis-je faire pour ne pas avoir ce message d'erreur, et que je gère moi-même cet erreur?
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 25 mai 2008 à 16:05
Salut,
Voici un bout de code qui pourrait t'aiguiller :
Try
My.Computer.FileSystem.DeleteFile("C:\Test.doc")
Catch ex As Exception
MsgBox("Le fichier ne peut pas être supprimé")
End Try
Petite explication :
Il faut mettre entre Try et Catch, le code que tu veux surveiller ou qui est susceptible d'obtenir un message d'erreur. C'est le cas ici pour : My.Computer.FileSystem.DeleteFile("C:\Test.doc").
Entre Catch et End Try, il faut mettre le code pour gérer toi même cette erreur, par exemple, moi je fais afficher un message spécifiant que le fichier n'a pas pu être supprimé.
Après je sais pas si tu spécifies directement le chemin d'accès + le nom du fichier ou alors c'est une boucle qui parcoure tous les fichiers d'un dossier (je penses que c'est ce cas là que tu utilises). Dans le 1° cas, faudra tester au préalable si le fichier existe.
++
Si tu as des soucis, n'hésites pas
----------------------------------------
N'oubliez pas : Réponse Acceptée
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 25 mai 2008 à 21:11
Salut,
Tu es sûr car avec ce code j'ai publié mon projet puis installé mon programme.
Je lances le fichier Test.doc pour que le processus winword.exe l'utilise et je lances ensuite mon programme et j'ai bien mon message d'erreur qui apparait mais Windows ne fait rien, ce qui est normal c'est à cà que sert Try Catch
Je vois pas pas pourquoi Windows intervient !!! Tu peux mettre ton code pour que je jette un coup d'oeil ?
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 25 mai 2008 à 21:11
Salut,
Tu es sûr car avec ce code j'ai publié mon projet puis installé mon programme.
Je lances le fichier Test.doc pour que le processus winword.exe l'utilise et je lances ensuite mon programme et j'ai bien mon message d'erreur qui apparait mais Windows ne fait rien, ce qui est normal c'est à cà que sert Try Catch
Je vois pas pas pourquoi Windows intervient !!! Tu peux mettre ton code pour que je jette un coup d'oeil ?
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 25 mai 2008 à 21:25
Salut, voila mon code:
For i = 0 To ListView1.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView
For j = 0 To ListView1.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView
If Me.ListView1.Items(i).Checked = True Then
Try
My.Computer.FileSystem.DeleteFile(ListView1.Items(i).SubItems(2).Text, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing)
Me.ListView1.Items(i).Remove()
Catch
Try
My.Computer.FileSystem.DeleteDirectory(ListView1.Items(i).SubItems(2).Text, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing)
Me.ListView1.Items(i).Remove()
Catch
Me.ListView1.Items(i).Checked = False
End Try
End Try
End If
Next j
Next i
En gros, ici, si un Item de ListView1 est coché, on supprime le fichier ou dossier ayant pour nom la valeur de l'item...
Si on arrive pas à supprimer le fichier, on essaie de le supprimer en disant que c'est un dossier, et si ça fonctionne toujours pas (parce qu'il est utiliser par un processus par exemple), on décoche l'item (ou on affiche un msg d'erreur par exemple).
Voila, donc pour conclure, j'ai la case qui se décoche, ET le message de Windaube.
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 25 mai 2008 à 21:35
Essaies plutôt cà :
For i = 0 To ListView1.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView
For j = 0 To ListView1.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView
If Me.ListView1.Items(i).Checked = True Then
Try
If My.Computer.FileSystem.FileExists(ListView1.Items(i).SubItems(2).Text) = True Then ' On teste si l'item sélectionné est un fichier
My.Computer.FileSystem.DeleteFile(ListView1.Items(i).SubItems(2).Text, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing) ' Si oui, on le supprime
Me.ListView1.Items(i).Remove()
Else ' Sinon c'est un dossier
My.Computer.FileSystem.DeleteDirectory(ListView1.Items(i).SubItems(2).Text, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing)
Me.ListView1.Items(i).Remove()
End If
Catch
Me.ListView1.Items(i).Checked = False
End Try
End If
Next j
Next i
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 25 mai 2008 à 21:46
Par contre, ton code va rencontrer une erreur si tu supprimes le dernier item de ListView1
En effet, imaginons que ta Listview à 5 items : la variable i va aller de 0 à 4.
Tu coches le dernier item, donc c'est quand i sera égal à 4 que ton code va supprimer cet item
Malheureusement, après avoir supprimer cet item, il t'en restera plus que 4 items (de 0 à 3) mais la variable i, elle sera toujours à 4 donc ta ligne de code Me.ListView1.Items(i).Checked = False va tomber sur un item inexistant ce qui va produire une erreur
(3) ----------------------------------
(*) i est toujours égal à 4 donc erreur avec la ligne de code Me.ListView1.Items(i).Checked = False puisque l'item n°4 n'existe plus
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 25 mai 2008 à 22:14
Salut,
Oui, je me disais aussi, je ne comprenais pas pourquoi j'aurais une erreur ici alors que ça fonctionne très bien avec d'autre code ce style.
Par contre, le code que tu m'as proposé ne change rien, j'ai toujours le même problème.
Les fichiers devant être supprimé se trouve dans Prefetch, Temp et autre dossier de Windows dans lequel on trouve des fichiers inutile... Peu être que l'erreur est provoqué par le fait que ça viens de ce genre de dossier?
Bon, sinon, je ne vois vraiment pas d'où peux venir ce problème
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 26 mai 2008 à 17:43
Pour le moment tout le code est là:
Dim i As Integer
For i = 0 To ListView1.Items.Count ' Boucle sur le nombre de colonnes dans la ListView
If Me.ListView1.Items(i).Checked = True Then
Try
If My.Computer.FileSystem.FileExists(ListView1.Items(i).SubItems(2).Text) = True Then ' On teste si l'item sélectionné est un fichier
My.Computer.FileSystem.DeleteFile(ListView1.Items(i).SubItems(2).Text, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing) ' Si oui, on le supprime
Me.ListView1.Items(i).Remove()
Else ' Sinon c'est un dossier
My.Computer.FileSystem.DeleteDirectory(ListView1.Items(i).SubItems(2).Text, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing)
Me.ListView1.Items(i).Remove()
End If
Catch
Me.ListView1.Items(i).Checked = False
End Try
End If
Next i
Il n'y a rien d'autre car je développe des fonctions sous un projet temporaire consacré à celà (pour éviter justement les éventuelles bug que peuvent provoquer les autres fonctions)
Voila, je continue à cherche de mon côté, mais tout comme toi, sans résulat positif