Problème avec File.copy [Résolu]

Messages postés
2
Date d'inscription
lundi 14 juillet 2008
Dernière intervention
12 août 2009
- - Dernière réponse : jerome_
Messages postés
10
Date d'inscription
mercredi 11 février 2004
Dernière intervention
13 août 2010
- 13 août 2010 à 16:00
Bonjour,
Je me demande où est le problème de ce code, car quand je le lance (avec SharpDevelop) mon petit programme il fonctionne la première fois (c'est à dire qu'il copie le fichier sourcefile vers destfile) et à la deuxième ouverture de mon OpenFileDialog il y a une erreur au niveau de File.copy!?
Pourtant lorsque l'on retire les lignes this.pictureBox1.SizeMode PictureBoxSizeMode.StretchImage et this.pictureBox1.Image Image.FromFile(destfile) le programme copie et écrase tant que l'on veut destfile.

voici le code

void PictureBox1Click(object sender, EventArgs e)
{
string sourcefile = null;
string destfile = @"E:\Test file\Test.jpg";

this.openFileDialog1 = new OpenFileDialog();
this.openFileDialog1.CheckPathExists = true;
this.openFileDialog1.CheckFileExists = true;
this.openFileDialog1.Filter = "Tous les fichiers |*.*; | Tous les fichiers images |*.jpg; " ;
this.openFileDialog1.FilterIndex = 2;
this.openFileDialog1.Title = "Choissisez votre pochette vidéo";

if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
sourcefile = this.openFileDialog1.FileName;
}

if (File.Exists (destfile))
{
File.Delete (destfile);
}

File.Copy (sourcefile, destfile);
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
this.pictureBox1.Image = Image.FromFile(destfile);

this.textBox1.Text = sourcefile;
this.textBox2.Text = destfile;

}
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
2
Date d'inscription
lundi 14 juillet 2008
Dernière intervention
12 août 2009
3
Merci
Bonsoir
Pour répondre a LEPROV c'est bien à cause de Image.FormFile que File.Delete ne fonctionne pas mais le lien en question ne convient pas tout a fait avec le problème alors voici le bon lien qui a résolu mon souci:

http://support.microsoft.com/kb/311754/fr

Merci quand même LEPROV
Cordialement

Dire « Merci » 3

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

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de blog45gel
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
C'est un bug de Image.FromFile qui garde le fichier ouvert

La doc de cette page explique comment implémenter un workaround : http://support.microsoft.com/kb/814675/en-us
Commenter la réponse de leprov
Messages postés
10
Date d'inscription
mercredi 11 février 2004
Dernière intervention
13 août 2010
0
Merci
Bonjour,

j'ai également le même problème avec File.copy : Je développe une appli en C# WPF sous win 7.

J'ai mis une image à l'intérieur d'un canvas afin d'y dessiner dessus et enregistrer l'image modifiée.
Le problème vient lorsque j'essai de sauvegarder sur le même fichier cela me dis : la ressource est en cours d'utilisation.

Pourtant j'ai fais un clear sur le canvas mais cela ne doit pas être suffisant :s

Je ne vois aucune fonction dispose ou close sur mon objet image donc je ne sais pas quoi faire d'autre pour libérer cette image.

Code C# :

string fichierOriginal; // contient le chemin de mon fichier original
InkCanvas canvasPlan; // inkcanvas
...

//affectation de l'image dans le canvas
Image imageCanvas = new Image();
imageCanvas.Source = new BitmapImage(new Uri(fichierOriginal, UriKind.RelativeOrAbsolute));
canvasPlan.Children.Add(imageCanvas);


//sauvegarde apres modifications
string fichierJpg= @"c:\temp\canvasPlan.jpg"; //fichier temporaire
ExportToJpeg(fichierJpg, canvasPlan);

//vide le canvas
/*foreach (Image uneImage in canvasPlan.Children.OfType())
{
uneImage.Source = new BitmapImage(); // j'ai essayé d'enlever la source mais ca ne change rien
}*/
canvasPlan.Children.Clear(); //supprime les objets a l'intérieur du canvas
canvasPlan.Strokes.Clear(); //supprime les traits de stylet


//essai d'ecraser le fichier original avec la modif
File.Copy(fichierJpg, fichierOriginal, true); //BUG ici : ressource non disponible : fichierOriginal



Etant en WPF je n'ai pas la fonction Image.FromStream. J'ai donc rajouté la référence System.Drawing pour l'avoir.
Si j'applique la solution proposée je me retrouve avec un autre probleme : les deux types image ne sont pas compatibles.

//affectation de l'image dans le canvas

                FileStream fs;
                fs = new FileStream(pathImg, FileMode.Open, FileAccess.Read);
                imageCanvas = System.Drawing.Image.FromStream(fs);   //BUG : imageCanvas est de type System.control.image est ne veut pas de l'autre image
                fs.Close();
            canvasPlan.Children.Add(imageCanvas); //veut un UIElement (accepte System.control.image mais refuse System.Drawing.Image)


Merci de votre aide
Commenter la réponse de jerome_
Messages postés
10
Date d'inscription
mercredi 11 février 2004
Dernière intervention
13 août 2010
0
Merci
J'ai fini par trouver en cherchant sur la doc un peu au hasard.

[ http://www.csharpfr.com/forum/sujet-PROBLEME-LIBERER-RESSOURCES-IMAGE-FOND-CANVASLORS-SAUVEGARDE_1460730.aspx J'ai mis la solution sur un autre Post]
Commenter la réponse de jerome_

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.