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

cs_JuS 121 Messages postés mardi 15 juillet 2003Date d'inscription 20 mars 2009 Dernière intervention - 14 août 2006 à 15:23 - Dernière réponse : Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention
- 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
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 14 août 2006 à 15:36
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

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Lutinore
Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 14 août 2006 à 15:59
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
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

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

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

Théo
Commenter la réponse de cs_RMI
cs_JuS 121 Messages postés mardi 15 juillet 2003Date d'inscription 20 mars 2009 Dernière intervention - 14 août 2006 à 16:00
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
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 14 août 2006 à 16:08
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
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 14 août 2006 à 16:43
0
Merci
Mince, à chaque fois que je trouve un truc ça existe déja dans le famework.
Commenter la réponse de Lutinore
f_electro 1 Messages postés mardi 10 avril 2007Date d'inscription 26 avril 2007 Dernière intervention - 26 avril 2007 à 15:34
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
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 27 avril 2007 à 06:48
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.