2013-04-11 2 views
2

j'ai le code C# suivant:C Erreur d'accès fichier #

string selectedFile = "D:\..\IMGP2695.JPG"; 
MyImage myImage = new MyImage(); 
Image image = Image.FromFile(selectedFile); 
string thumbnail_name = CreateThumbnail(image); 
myImage.height = image.Height + "px"; 
myImage.width = image.Width + "px"; 
ftp.upload(myImage.internalName, selectedFile, directory); 


The process cannot access the file `'D:\..\IMGP2695.JPG'` because it is being used by another process. 

Je reçois cette erreur lorsque le code essayez d'exécuter ftp.upload. Je sais ce que l'erreur signifie mais je ne sais pas quoi faire pour fermer le handle au fichier ouvert.

+1

Pourquoi ouvrez-vous en premier lieu? –

+0

Le fichier est le résultat d'un OpenFileDialog. Je ne l'ouvre pas explicitement. –

Répondre

2

Essayez de dispose objet image en enroulant Image.FromFile avec using:

string selectedFile = "D:\..\IMGP2695.JPG"; 
MyImage myImage = new MyImage(); 
string thumbnail_name = string.empty; 
using(Image image = Image.FromFile(selectedFile)){ 
    thumbnail_name = CreateThumbnail(image); 
    myImage.height = image.Height + "px"; 
    myImage.width = image.Width + "px"; 
} 
ftp.upload(myImage.internalName, selectedFile, directory); 
+0

Je devrais utiliser "using". merci pour votre exemple. Je vais changer mon code en conséquence. –

1

Parce que vous appelez Image image = Image.FromFile(selectedFile);avant le téléchargement, pour une raison quelconque.

Si vous regardez sur Image.FromFile la documentation que vous verrez la chaîne suivante:

Le fichier reste verrouillé jusqu'à ce que l'image est disposé.

Cela signifie que, selon le code fourni, vous pouvez initialiser l'image même après le téléchargement terminé.

ftp.upload("NAME_OF_THE_FILE_RECOVERED_FROM_FILE_ITSELF", selectedFile, directory); 

Image image = Image.FromFile(selectedFile); 
+0

Parfait. Maintenant travaille. Merci beaucoup. Je n'ai pas pensé à cette ligne. Pardon. Pouvez-vous me donner une idée sur la façon de télécharger l'image avec un autre fil? Le formulaire reste figé jusqu'à ce que le téléchargement soit terminé et que ce ne soit pas agréable. –