Suppression d'image [Résolu]

Signaler
-
 Utilisateur anonyme -
Bonjour,



Mon probleme est de supprimer une image, pour cela j'ai essaye trois methodes toutes aussi infructueuses, les voici :



File.Delete(@"C:\TEMP\old1.bmp");



Puis :



File.Move(@"C:\TEMP\new1.bmp",@"C:\TEMP\old1.bmp");



Et ensuite :



System.Drawing.Image Old = Bitmap.FromFile(@"C:\TEMP\old1.bmp");

Old.Dispose();

System.Drawing.Image New = Bitmap.FromFile(@"C:\TEMP\new1.bmp");

New.Save(@"C:\CAIRO\TEMP\old1.bmp");



J'ai aussi essaye de mixer la 1ere avec la trois pour essayer de
"disposer" l'image old, au passage, voila comment sont ouvertes les
images :



Bitmap newPic1 = new Bitmap(@"C:\TEMP\new1.bmp");

Bitmap oldPic1 = new Bitmap(@"C:\TEMP\old1.bmp");



Je ne sais plus trop quoi essayer, n'auriez vous pas une idee voire meme une solution ? Je suis preneur

8 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Voilà ce que dit la doc de Image.FromFile "Le fichier reste verrouillé tant que image n'a pas été supprimé." à mons avis tu as oublié d'appeler Dispose pour un image, ( dans une fonction, une ré-allocation ou quelque chose comme ça ) du coup elle existe encore en mémoire, tant que le garbage collector n'est pas passé. Au pire avec un GC.Collect avant File.Delete ça devrait marcher.
Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
salut

Normalement la methode File.Delete(cheminFichier); marche parfaitement ... apres, il faut que tu verifie si tu as bien les droits nécéssaire sur ce fichier ...

Pour mon cas j'ai utiliser cette méthode de nombreuses fois et je n'ai jamais eu de probleme

Bonne journée

The process cannot access the file "old1.bmp" because it is being used by another process.



J'ai eu ce probleme entre autre, c'est pour cela que j'avais fait appel Old.Dispose()
qui ne semblait pas fonctionner. Visiblement, je ne suis pas le seul a
avoir rencontrer des difficultes pour utiliser cette methode puisque
d'autres messages du forum s'y rapportent sans toutefois apporter la
solution a mon probleme.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut utilises tu une PictureBox ou un autre contrôle qui maintient l'image ? Si c'est le cas avant d'appeler File.Delete utilises ses deux lignes de code :

myPictureBox.Image.Dispose( );
myPictureBox.Image = null;

Salut Lutinore,



J'ai vu que tu comprenais mon probleme mais justement, les images qui
sont traites ne sont contenus dans aucun controle, elles sont juste sur
le disque dur.

En fait dans mon programme, je cree une premiere image que j'enregistre
(new1.bmp), je la compare a l'ancienne (old1.bmp), si les differences
entre les deux images depassent un certain seuil, j'enregistre
new1.bmp. Dans tous les cas, a la fin, j'enregistre new1.bmp comme
etant la nouvelle old1.bmp. C'est lors de cette derniere operation que
je dois effacer old1.bmp et qu'il me fait une erreur.



Je precise que je fais cela pour faire de la detection de mouvements.
Si vous avez une idee du pourquoi de l'erreur ou d'une autre facon de
proceder, je vous en serais tres reconnaissant.

Merci bien pour ces informations, l'erreur que j'ai faite ne peut etre
que celle que tu dis malheureusement je ne vois vraiment ou j'ai pu
oublier d'appeler Dispose().



J'ai essaye avec un GC.Collect dont je ne connaissais pas l'existence
(premier vrai programme en C# oblige nombre de decouvertes) neanmoins,
cela ne semble pas fonctionner alors que j'ai fait un GC.Collect().



Je vais me replonger dans mon code pour voir d'ou peut venir mon erreur, merci encore pour ces precieuses informations.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Montres le code qui pose problème si tu veux.

Merci pour tout Lutinore, grace a toi je viens de trouver l'erreur qui
etait presque sous mes yeux, mon probleme n'en est plus un et j'arrive
a detecter les mouvements et a enregistrer ces mouvements ! Merci
encore pour ton aide Lutinore.