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

blog45gel 2 Messages postés lundi 14 juillet 2008Date d'inscription 12 août 2009 Dernière intervention - 24 juil. 2009 à 16:23 - Dernière réponse : jerome_ 10 Messages postés mercredi 11 février 2004Date d'inscription 13 août 2010 Dernière intervention
- 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 

4 réponses

Répondre au sujet
blog45gel 2 Messages postés lundi 14 juillet 2008Date d'inscription 12 août 2009 Dernière intervention - 12 août 2009 à 22:59
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de blog45gel
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 24 juil. 2009 à 16:48
0
Utile
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
jerome_ 10 Messages postés mercredi 11 février 2004Date d'inscription 13 août 2010 Dernière intervention - 12 août 2010 à 17:10
0
Utile
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_
jerome_ 10 Messages postés mercredi 11 février 2004Date d'inscription 13 août 2010 Dernière intervention - 13 août 2010 à 16:00
0
Utile
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.