Image.FromFile et File.Delete/File.Move

Résolu
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 - 14 août 2006 à 15:23
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre 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

8 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 août 2006 à 15:36
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
3
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
14 août 2006 à 15:59
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
*/
3
cs_RMI Messages postés 305 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 août 2010 2
14 août 2006 à 15:34
As tu essayé avec

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

Théo
0
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
14 août 2006 à 16:00
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
14 août 2006 à 16:08
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
*/
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 août 2006 à 16:43
Mince, à chaque fois que je trouve un truc ça existe déja dans le famework.
0
f_electro Messages postés 1 Date d'inscription mardi 10 avril 2007 Statut Membre Dernière intervention 26 avril 2007
26 avril 2007 à 15:34
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 avril 2007 à 06:48
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.
0
Rejoignez-nous