Image.FromFile et File.Delete/File.Move [Résolu]

Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Dernière intervention
20 mars 2009
- - Dernière réponse : Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 27 avril 2007 à 06:48
Bonjour,

Voici mon problème. Je suis en train de développer une application qui va chercher des images pour les afficher. Jusque là tout va bien.
J'affiche ces images dans un objet PictureBox à l'aide de la commande Image.FromFile :






this.pbRecto.Image = Image.FromFile(@"C:\MonImage.jpg");



Dans cette application je peux supprimer ou déplacer ces images. J'utilise donc les commandes File.Delete et File.Move.

File.Move(@"C:\MonImage.jpg",@"C:\Save\MonImage.jpg");
ou
File.Delete(@"C:\MonImage.jpg");

Cependant lorsque le programme arrive à ces commandes il sort en erreur en me disant :
Le processus ne peut pas accéder au fichier 'C:\MonImage.jpg', car il est en cours d'utilisation par un autre processus.

A mon avis c'est parce que je suis en train de l'afficher que je ne peux pas la supprimer ou la déplacer ...

Il y aurait-il un autre moyen de faire à part créer des copies des images que j'affiche ?

Merci d'avance pour votre aide




-=[JuS]=-



Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
3
Merci
Salut, c'est une question qui revient souvent, en fait le fichier est verrouiller par le système tant que l'image n'est pas disposée.


Regardes ici :

http://www.csharpfr.com/infomsg_PROBLEME-ECRITURE-FICHIER-IMAGE_744875.aspx

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Lutinore
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
3
Merci
Salut,

Avec la méthode Clone le handle sur le fichier reste quand même ouvert il me semble.
Une solution est de recréer une image à partir de celle ouverte sur le disque et de fermer cette dernière.
Par exemple en utilisant une méthode de ce genre (à modifier suivant les remontés d'exceptions nécessaires notamment) :

private static Image ImageFromFile(string filename)
{
    return ImageFromFile(filename, false);
}



private static Image ImageFromFile(string filename, bool useEmbeddedColorManagement)
{
    Image img;



    try
    {
        Image tmp = Image.FromFile(filename, useEmbeddedColorManagement);
        img = new Bitmap(tmp);
        tmp.Dispose();
        tmp = null;
    }
    catch
    {
        img = null;
    }



    return img;
}






/*
coq
MVP Visual C#
CoqBlog
*/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_coq
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Dernière intervention
2 août 2010
0
Merci
As tu essayé avec

this.pbRecto.Image = Image.FromFile(@"C:\MonImage.jpg").Clone();

Théo
Commenter la réponse de cs_RMI
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Dernière intervention
20 mars 2009
0
Merci
La deuxième réponse est la bonne et honte à moi pour la recherche que je n'ai pas fait !

Vilain méchant moi même !




-=[JuS]=-



Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live
Commenter la réponse de cs_JuS
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
La réponse de Lutinore est bonne aussi, mais comme dans le cas présent on ne doit pas modifier l'image autant laisser le Framework se charger de la duplication :-)

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
0
Merci
Mince, à chaque fois que je trouve un truc ça existe déja dans le famework.
Commenter la réponse de Lutinore
Messages postés
1
Date d'inscription
mardi 10 avril 2007
Dernière intervention
26 avril 2007
0
Merci
Voici mon problème
.l'orsque je tappe ""this.pictureBox1.Image = Image.FromFile(@"C:\banane.jpeg");"" il m'affiche une erreure ?
j'ai rien compré ?



il n'affiche pas l'image dans le picturebox ?
je travail avec c#.net sur visual studio 2003
Commenter la réponse de f_electro
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
0
Merci
Salut, si tu ne donnes pas le message d'erreur on ne peut pas t'aider.. Sûremement que l'image est introuvable à cet emplacement.
Commenter la réponse de Lutinore

Vous n'êtes pas encore membre ?

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

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 et codes sources.

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