The process cannot access the file ... because it is being used by another proce

Résolu
Chiche69 Messages postés 34 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 25 septembre 2010 - 12 août 2009 à 10:38
msb2006 Messages postés 5 Date d'inscription dimanche 21 mai 2006 Statut Membre Dernière intervention 27 décembre 2009 - 27 déc. 2009 à 02:57
Bonjour

J'ai un probleme que je n'arrive pas a resoudre. J'ai un programme qui me permet de faire des captures d'images, et des enregistrements videos. Lorsque je souhaite supprimer les captures d'images le programme se stop et j'ai l'erreure suivante :

The process cannot access the file 'D:\Patients Directories\Images\4-8-2009 16h29m4s.bmp' because it is being used by another process.

si je force le debuggage il supprime normalement le fichier.

voici une partie de mon code:


Private Sub btnDeleteSelected_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeleteSelected.Click
Dim Response As MsgBoxResult
Dim SelectedImageIndex As Integer
Dim SelectedImagePath As String
Dim PictureType As String
Dim Fichier As String
Dim SelectedVideoPath As String
Dim Index As String = ListView1.SelectedItems.Count - 1

Response = MsgBox("Do you really want to delete this Image from your computer ?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.Yes Then

For c As Integer = 0 To Index
'SelectedImageIndex = ListView1.FocusedItem.ImageIndex 'index de l'image selectionnee
SelectedImagePath = ListBoxVirtuelle.Items.Item(0)
Fichier = System.IO.Path.GetFileName(SelectedImagePath).Split(".")(0) 'Donne le nom du fichier sans l'extension
PictureType = System.IO.Path.GetExtension(SelectedImagePath) 'Donne l'extension de l'image selectionnee


ListBoxVirtuelle.Items.Clear()
ListView1.Items.Clear()
ImageList1.Images.Clear()
PictureBox1.Dispose()
AxltmmCaptureCtrl1.Dispose()
AxltmmPlayCtrl1.Dispose()
ImageList2.Images.Clear()

File.Delete("D:\Patients Directories\Images" & Fichier & PictureType) L'erreur est ici
'My.Computer.FileSystem.DeleteFile("D:\Patients Directories\Images" & Fichier & PictureType)
LoadImage()
Next


Else
End If
End Sub


Public Sub LoadImage()
l = 1
ListView1.Items.Clear()
CurrentImageList.Images.Clear()
ListBoxVirtuelle.Items.Clear()
Dim Fichier As String

For Each foundImage As String In _
My.Computer.FileSystem.GetFiles( _
"D:\Patients Directories\Images", _
FileIO.SearchOption.SearchTopLevelOnly, "*.gif*", "*.jpg*", "*.bmp*")
Dim PictureType As String = System.IO.Path.GetExtension(foundImage)
CurrentImageList.Images.Add(Image.FromFile(foundImage))
Fichier = System.IO.Path.GetFileName(foundImage).Split(".")(0) 'Donne le nom du fichier sans l'extension

ListView1.Items.Add(New ListViewItem(New String() {Fichier}, l - 1))
ListView1.View = View.LargeIcon
ListBoxVirtuelle.Items.Add(foundImage)
l = l + 1
Next
lblNombreFichiers.Text = "Nombre de fichier(s) : " & ListView1.Items.Count

End Sub


Voici le code qui prend les captures...
Private Sub btnCapture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCapture.Click


Dim oDateHeure As String = Date.Now.Day.ToString & "-" & Date.Now.Month.ToString & "-" & Date.Now.Year.ToString & " " & Date.Now.Hour.ToString & "h" & Date.Now.Minute.ToString & "m" & Date.Now.Second.ToString & "s"

If ValidateOK = True Then
AxltmmCaptureCtrl1.CapturePicture.Save("D:\Patients Directories\Images" & oDateHeure & format)

LoadImage()
Else
MsgBox("Erreur, Vous n'avez pas valide de configuration")
End If
End Sub


Merci de me donner un coup de main. J'ai essaye plusieurs solutions mais sans succes. Je n'arrive pas a savoir ou le fichier est utilise.


n'hesitez pas de me poser une question si mon post n'est pas complet...

Chiche69

3 réponses

bitangm Messages postés 13 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 24 août 2010
12 août 2009 à 12:36
Le problème vient du fait que le fichier est encore
vérouillé par un autre processus, il faut attendre sa
libération, la fonction ci-dessus résoudra ton problème


Public Function SuppressionFichier(ByVal LeChemin As String, ByVal ForcerLaSuppression As Boolean, Optional ByVal NombreDeTentatives As Integer = 1) As Boolean
If ForcerLaSuppression Then
'Le nombre de tentatives de suppression du fichier est illimité
NombreDeTentatives = Integer.MaxValue
ElseIf NombreDeTentatives < 1 Then
'Le nombr de tentatives doit être suppérieur ou égal à 1
NombreDeTentatives = 1
End If

For i As Integer = 1 To NombreDeTentatives
Try
'Tentative de suppression du fichier
System.IO.File.Delete(LeChemin)
'L'opération à été effectuée, on quitte la boucle
Exit For
Catch ex As Exception
'Erreur de suppression, on actualise l'affichage pour ne pas vérouiller le processeur
System.Windows.Forms.Application.DoEvents()
End Try
Next

'Renvoi True si le fichier n'existe plus
'Renvoi False si le fichier existe toujours
Return Not System.IO.File.Exists(LeChemin)
End Function



BITANG Marcel Yves
bitangm@yahoo.fr
+237 75 17 16 81
+237 75 68 58 22
+237 96 04 18 51
3
Chiche69 Messages postés 34 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 25 septembre 2010
12 août 2009 à 13:11
Merci bitangm !

La fonction marche parfaitement!
0
msb2006 Messages postés 5 Date d'inscription dimanche 21 mai 2006 Statut Membre Dernière intervention 27 décembre 2009
27 déc. 2009 à 02:57





0
Rejoignez-nous