2010-09-23 2 views
1

Je suis chargement d'un fichier:C# ASP.NET Comment supprimer un fichier "en cours d'utilisation" par un autre processus?

System.Drawing.Image img = System.Drawing.Image.FromFile(FilePath); 

Maintenant, je voudrais enregistrer l'image:

img.Save(SavePath); 

Cela fonctionne .. À moins FilePath == SavePath, il décide de me donner l'erreur:

System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+. 

J'ai donc essayé de supprimer le fichier, juste après son ouverture:

System.Drawing.Image img = System.Drawing.Image.FromFile(FilePath); 
File.Delete(FilePath); 

Et il me donne l'erreur:

System.IO.IOException: The process cannot access the file 'filename.jpg' because it is being used by another process. 

Alors ... Comment puis-je modifier un fichier existant, qui est « en cours d'utilisation » lorsque ce ne est pas utilisé par quelqu'un?

Répondre

2

L'image restera bloqué jusqu'à ce qu'il est disposé (See here).

The file remains locked until the Image is disposed.

Vous devez enregistrer l'image dans un autre (ou copier son contenu sur) puis éliminer l'image ouverte par l'utilisation d'une clause using.

Exemple:

using(Image image1 = Image.FromFile("c:\\test.jpg")) 
{ 
    image1.Save("c:\\test2.jpg"); 
} 

System.IO.File.Delete("c:\\test.jpg"); 
System.IO.File.Move("c:\\test2.jpg", "c:\\test.jpg"); 
+0

Pourquoi dans le nom de ciel le fichier resterait-il verrouillé? son ouvert, lu dans la mémoire, et fermé? rend le type d'image un PITA. – Justin808

+0

@ Justin808: Je ne suis pas sûr dans le raisonnement mais la documentation le dit par conception, voir ma modification ci-dessus. –

+0

Cela fonctionne, mais le lien ci-dessous explique comment procéder sans l'utilisation d'un fichier temporaire. – Justin808