2013-04-11 97 views
2

我有下面的C#代码:C#文件访问错误

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. 

我得到这个错误时,该代码尝试运行ftp.upload。我知道错误意味着什么,但我不知道该如何处理打开的文件。

+1

你为什么要打开它摆在首位? – 2013-04-11 08:08:23

+0

该文件是OpenFileDialog的结果。我没有明确地打开它。 – 2013-04-11 08:09:26

回答

2

尝试dispose图像对象通过包装Image.FromFileusing

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

我应该使用“使用”。感谢你的例子。我会相应地更改我的代码。 – 2013-04-11 08:16:57

1

因为您在之前致电Image image = Image.FromFile(selectedFile);上传,出于某种原因。

如果你看看Image.FromFile文件,你会看到以下字符串:

文件仍然锁定,直到图像设置。

这意味着,根据所提供的代码,你可以初始化图片甚至后上传完成。

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

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

完美。现在正在工作。非常感谢。我没有想到这一行。抱歉。你能给我一个关于如何用另一个线程上传图片的想法吗?在上传完成之前,表单一直处于冻结状态,并不好。 – 2013-04-11 08:12:40