2009-09-17 9 views
0

dans mon application Windows il y a un processus de sauvegarde de l'image.je peux enregistrer différentes images.les détails des images seront vus dans une grille, quand je clique sur la ligne correspondante dans la grille l'image sera affichée dans une image Je veux supprimer l'image ouverte en appuyant sur la touche d'effacement. J'ai utilisé le code "deletefile (path)" pour cette opération, mais il y a une erreur "Ce fichier est utilisé par un autre processus." si quelqu'un connaît la solution pour ce problème s'il vous plaît aidez-moi. merci.image est utilisé par un autre processus

Répondre

0

Ouvrez le fichier image en utilisant Image.FromStream et assurez-vous que close le stream après le chargement de l'image. De cette façon, vous ne devriez pas avoir de verrous sur le fichier.

Ajouté après commentaire.
Je n'ai pas Visual Studio sous la main et je suis un C# gars mais il devrait ressembler à quelque chose comme ça.

Dim stream As New FileStream(specified_path, FileMode.Open) 
Dim image As Image = Image.FromStream(stream) 
picturebox1.image = image 
stream.Close() 
+0

mon code est comme ceci my.computer .filesystem.deletefile (chemin) – user85511

+0

i en utilisant ce code pour ouvrir l'image au picturebox " PictureBox1.Image = Image.FromFile (chemin d'accès spécifié) comment puis-je utiliser la Methode de fromstream et comment il va fermer oui – user85511

+0

cela fonctionne bien, mais l'image qui est affichée sur la zone d'image n'est pas claire – user85511

1

Avez-vous une référence à un objet Bitmap créé à partir de ce fichier? Si c'est le cas, l'objet Bitmap verrouille le fichier et vous empêche de le supprimer.

Le problème n'est pas où vous supprimez votre fichier, il réside dans la façon dont vous ouvrez votre image pour l'afficher. Pourriez-vous ajouter un code indiquant comment vous chargez votre image?

Lorsque vous chargez une image à l'aide de la liste de quelque chose Bitmap.FromFile, l'objet Bitmap conserve un verrou sur le fichier jusqu'à ce qu'il soit éliminé. Vous pouvez donc simplement utiliser le

using(Bitmap bmp = Bitmap.FromFile(path)) 
{ 
    /* The code using the bitmap to display it goes here */ 
} 

construire pour le forcer à libérer le fichier une fois que vous n'en avez pas besoin. Cela l'empêchera de se verrouiller. La raison pour laquelle il se verrouille est qu'il ne charge pas tout le bitmap en mémoire lorsque vous créez l'objet bitmap, il le charge paresseusement à la demande, il doit donc garder un verrou sur le fichier.

+0

je peux, t understand.please me dire detail.please – user85511

+0

i en utilisant ce code pour ouvrir l'image au picturebox "PictureBox1.Image = Image.FromFile (chemin spécifié) – user85511

+0

Je suppose que vous avez afin de maintenir une référence à l'image de charger en tant qu'attribut: img = Image.FromFile (path); PictureBox1.Image = img; et avant la suppression de l'image: PictureBox1.Image = null; img.Dispose() img = null; /* Supprimer le fichier */ – Locksfree

Questions connexes