2012-11-29 35 views
4

我使用c#在pictureBox中顯示圖像。然後,我想更改圖片的名稱。我不能,因爲我知道圖像正在被另一個進程使用。c#從文件關閉連接圖像

我打開圖像這樣

Image image1 = Image.FromFile("IMAGE LOCATION"); ; 
     pictureBox1.Image = image1; 

然後試圖改變它的名字這樣,我得到IO異常說「,因爲它正由另一個進程的進程無法訪問文件。

System.IO.File.Copy(@"OldName", @"NewName"); //copy changes name if paths are in the same folder 

是不是保持圖像的對象圖像1?爲何由以前的過程中仍然鎖定文件?任何建議,將不勝感激。非常感謝!

回答

8

看一看這個問題:Free file locked by new Bitmap(filePath)

要釋放你需要做的位的副本鎖:

Image img; 
using (var bmpTemp = new Bitmap("image_file_path")) 
{ 
    img = new Bitmap(bmpTemp); 
} 
+0

太棒了。謝謝!!有效 !! – RonaDona

3

是,picture box以這種方式控制磁盤鎖定IO文件。

如果要重命名鏈接的文件,您可以:

  • 或處置picture box,並重命名文件(如果這是適合你的應用程序)

  • 或指定該圖像的副本/克隆爲picture box

+0

不幸的是,處置沒有工作 – RonaDona

2

你可以試試這個:

Image image1 = null; 

using(FileStream stream = new FileStream("IMAGE LOCATION", FileMode.Open)) 
{ 
    image1 = Image.FromStream(stream); 
} 

pictureBox1.Image = image1 

;

+0

這一個也工作。謝謝你的朋友 – RonaDona

+0

根據我所連接的答案可能無法正常工作。 –

+0

@Erno,爲什麼它可能不起作用? –

1

你需要配置你的形象:

Image image1 = Image.FromFile("IMAGE LOCATION"); ; 
    pictureBox1.Image = image1; 
image1.Dispose(); 

在做的舉動。

+0

請添加更多信息 –

0

這個解決方案解決了我的問題。我正在使用一個圖片框,並直接從磁盤加載它的圖像,沒有一箇中間圖像文件。當我完成時,我正在做一個「picturebox.dispose」,並沒有釋放圖像文件,我不能刪除它,因爲「文件被vshost使用」。我不得不顯式創建一個圖像變量(IE dim MyImage作爲圖像),然後首先將圖像加載到圖像變量中,然後將MyImage加載到圖片框中。通過引用圖像我可以做一個MyImage.dispose。這關閉了vshost和圖像之間的鏈接,我可以通過程序刪除它。