2013-04-11 119 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