Signaler

Le processus ne peut pas accéder au fichier... [Résolu]

Posez votre question arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - Dernière réponse le 6 janv. 2017 à 15:39 par arion320
Bonjour,

Je me casse à fond la tête sur ma programmation mais je ne sais vraiment plus quoi faire.
J'ai tenter de créer un logiciel qui télécharge une image vers les fichiers temporaires avec ce code dans un module :


My.Computer.Network.DownloadFile("https://i39.servimg.com/u/f39/18/06/99/75/photo-10.jpg", My.Computer.FileSystem.SpecialDirectories.Temp & "\image1.png", False, 500)


puis il le lis dans la form2, dans une PictureBox avec ce code :


Private _Bitmap As Bitmap
Private _BitmapHover As Bitmap

If My.Computer.FileSystem.FileExists(My.Computer.FileSystem.SpecialDirectories.Temp & "\image1.png") Then
_Bitmap = New Bitmap(175, 175)
Using g = Graphics.FromImage(_Bitmap)
g.DrawImage(System.Drawing.Image.FromFile(My.Computer.FileSystem.SpecialDirectories.Temp & "\image1.png"), 0, 0, 175, 175)
End Using
PictureBox1.BackgroundImage = _Bitmap
End If


Mais l'image peut varié, c'est donc pour cela qu'à chaque Button1_click de la form1 j'ai ajouté ce code avant de lancer la form2 :


My.Computer.FileSystem.DeleteFile(My.Computer.FileSystem.SpecialDirectories.Temp & "\image1.png")


Mais le problème c'est qu'une erreur apparaît :

« Une exception non gérée du type 'System.IO.IOException' s'est produite dans mscorlib.dll

Informations supplémentaires : Le processus ne peut pas accéder au fichier 'C:\Users\Simon\AppData\Local\Temp\image1.png', car il est en cours d'utilisation par un autre processus.
»

J'ai donc chercher attentivement sur le net et le seul et unique problème similaire que j'ai trouvé c'est : http://www.developpez.net/forums/d9138/dotnet/developpement-windows/windows-forms/vb-net-supprimer-fichier-utilise/

Je me suis dis, ça peut le faire si je fais :


Kill(Form2.Picturebox1.backgroundimage)


Mais ça ne fonctionne pas. Du coup je suis vraiment perdu là. Quelqu'un aurait une solution ?

Merci d'avance.
Afficher la suite 
Utile
+1
moins plus
Bonjour,

Oui, avec une petite astuce, mettre une autre image à la place au moment de la modification, comme ceci:

Form2.PictureBox1.Image = Nothing
        Form2.PictureBox1.Image = My.Resources.essai


en ayant mis auparavant une image nommée "essai" dans les Resources

Voilà
arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 2 janv. 2017 à 14:05
Bonjour @cs_Le Pivert et bonne année !

Ah oui je n'ai pas penser à faire une modification pour que le processus "lâche" l’image en question.

Je vais essayer ça je vous tiens au courant.

Merci d'avance :)
Répondre
arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 2 janv. 2017 à 14:16
Après avoir essayé cette solution effectivement ça fonctionne parfaitement, c'était pourtant si simple. Merci beaucoup pour votre réponse j'espère que la suite sera plus simple haha. Bon vent l'ami !
Répondre
arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 2 janv. 2017 à 15:33
Après avoir réessayé pendant l'utilisation du logiciel, il se trouve que le problème persiste pourtant tout est en place. Vous êtes sûr qu'il n'y à pas un "Kill" pour la picturebox ?

Merci d'avance
Répondre
arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 2 janv. 2017 à 16:07
J'ai une autre idée, il y aurait-il un moyen de réinitialiser la form pour qu'il ne prenne plus en compte l'image ?
Répondre
Donnez votre avis
Utile
+1
moins plus
En fermant l'application et en l'ouvrant aussitot, comme ceci:

Me.Close() 'ferme l'application
Process.Start(Application.ExecutablePath) 'ouvre l'application


en ayant pris soin de mettre ton code de suppression de fichier dans l’événement d'ouverture de ton appli

  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load


Donnez votre avis
Utile
+0
moins plus
Comme ceci:

  Form2.PictureBox1.Image.Dispose()
Form2.PictureBox1.Image = Nothing
        Form2.PictureBox1.Image = My.Resources.essai
My.Computer.FileSystem.DeleteFile(My.Computer.FileSystem.SpecialDirectories.Temp & "\image1.png")
 




arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 2 janv. 2017 à 16:44
Toujours pas, j'ai penser que le problème venait sûrement de la condition que j'ai poser avant l'action :


If My.Computer.FileSystem.FileExists(My.Computer.FileSystem.DeleteFile(My.Computer.FileSystem.SpecialDirectories.Temp & "\image1.png") Then

My.Computer.FileSystem.DeleteFile(My.Computer.FileSystem.SpecialDirectories.Temp & "\image1.png")

End If


Donc j'ai essayé avec un simple try :


Try

My.Computer.FileSystem.DeleteFile(My.Computer.FileSystem.SpecialDirectories.Temp & "\image1.png")

End Try


Mais le problème c'est qu'il me dit que le fichier existe déjà.
Répondre
Donnez votre avis
Utile
+0
moins plus
Voir cette discussion qui traite du même sujet:

http://codes-sources.commentcamarche.net/forum/affich-10069059-mettre-une-image-en-noir-et-blanc-sepia-version-d-origine#13
arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 2 janv. 2017 à 19:31
Sujet très instructif ça m'a appris de nouvelles lignes mais le problème c'est au niveau de la procédure de suppression. Quand la fenêtre de suppression s'affiche ça me met une erreur me disant que le fichier est utilisé par vshost32.exe donc visual studio et pareil hors Debug.

Je suis désespéré..
Répondre
Donnez votre avis
Utile
+0
moins plus
D'après ce que je lis:

Mais l'image peut varié, c'est donc pour cela qu'à chaque Button1_click de la form1 j'ai ajouté ce code avant de lancer la form2 :

Tu peux ouvrir la nouvelle image dans ta PictureBox sans supprimer l'ancien fichier!

A ce moment là tu supprimes ton ancien fichier à la prochaine ouverture de ton appli, c'est radical!

En ayant mis tous tes fichiers dans un dossier spécifique.
C'est ce que j'ai fait dans ce programme:

http://codes-sources.commentcamarche.net/source/view/101787/1439824


arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 5 janv. 2017 à 00:21
Oui justement je l'ai mis à chaque lancement de la form2 mais c'est bien ça le problème, ça ne fonctionne pas. Il me semble que sur mon poste j'avais vu une réponse intéressante que je ne retrouve plus ni ici-même ni dans mes email pourtant ça avait l'air intéressant. Il parlait de mettre le mode "Strict" en activé et la suite par contre je ne me souviens plus j'avais regarder vite fait. Je vais voir si ça fonctionne en mettant l'option strict
Répondre
arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 5 janv. 2017 à 00:23
L'option strict me créer des erreurs en me précisant qu'il n'accepte pas les « DownloadFile, etc... » je ne comprends plus rien
Répondre
Donnez votre avis
Utile
+0
moins plus
J'ai l'impression que tu n'as pas lu la totalité de mon dernier message!

A ce moment là tu supprimes ton ancien fichier à la prochaine ouverture de ton appli, c'est radical!


Je parle de l'appli et non du Form2!
cs_Le Pivert 4278Messages postés jeudi 13 septembre 2007Date d'inscription ContributeurStatut 25 février 2017 Dernière intervention - 5 janv. 2017 à 08:51
Pour Option Strict On, voici un peu de lecture:

https://msdn.microsoft.com/fr-fr/library/zcd4xwzs.aspx
Répondre
arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 5 janv. 2017 à 18:04
Oui mais justement, moi je voudrais que ça se fasse autrement qu'au lieu d'être obliger de redémarrer le logiciel.. Pour l'utilisateur c'est compliqué.
Répondre
arion320 213Messages postés lundi 20 décembre 2010Date d'inscription 8 janvier 2017 Dernière intervention - 6 janv. 2017 à 15:39
Ma dernière réponse avec le code complet s'est pas envoyé ! :@ :@ :@

Bref tant pis, en tout cas problème résolu, merci cs_Le Pivert pour ta patience et tes explications. À bientôt l'ami !
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !