Image.FromFile et File.Delete/File.Move

Résolu
Signaler
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
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

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
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
*/
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
As tu essayé avec

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

Théo
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
1
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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
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
*/
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Mince, à chaque fois que je trouve un truc ça existe déja dans le famework.
Messages postés
1
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
26 avril 2007

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
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
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.