问题描述
今天搞程序遇到一个很棘手的问题如下:新建了一个bmp图Bitmapzxwd_bmp=newBitmap(900,270);先把内存中的图片保存publicvoidsave_image()//以jpg格式保存内存中的图片{stringpath1=DateTime.Now.ToString("yyyy.MM.dd.HH.mm.ss");stringpath=Application.StartupPath+"\image\"+path1+".jpg";this.zxwd_bmp.Save(path,System.Drawing.Imaging.ImageFormat.Jpeg);}再把图片读到picturebox里面publicvoidread_image_toform()//把图片读到picturebox里面{stringopenfilename=Application.StartupPath+"\image\"+maxstr;this.zxwd_yuan_pictureBox.Image=Image.FromFile(openfilename);}最后删除这个图片publicvoiddelete_iamge()//删除所有图片{try{for(intdel_i=0;del_i<files.Length;del_i++){stringdelpath=Path.GetDirectoryName(Application.ExecutablePath)+"\image"+"\"+files[del_i].ToString();if(maxstr==files[del_i].ToString()){}else{System.IO.File.Delete(delpath);}}}catch(Exceptiondel_image_ex){MessageBox.Show(del_image_ex.ToString());}}在最后删除图片的时候出现了异常,说是其它进程占用了这个图片无法删除!汗~!我试了很多次,就算是给zxwd_yuan_pictureBox加载了其它的图片也不是说有其它进程仍然占用了这个图片,这个问题怎么解决?请大家帮帮忙。程序要得比较急,在线等,拜托了。!
解决方案
解决方案二:
else{this.zxwd_yuan_pictureBox.Image=null;System.IO.File.Delete(delpath);}
解决方案三:
学习中~~~~~
解决方案四:
把图片读到内存中吧this.zxwd_yuan_pictureBox.Image=Image.FromFile(openfilename);是连接图片文件的
解决方案五:
怎么把图片读到内存中啊?大哥帮帮忙啊.!
解决方案六:
还有二楼的朋友else{this.zxwd_yuan_pictureBox.Image=null;System.IO.File.Delete(delpath);}这种方法根本行不通啊.仍然是有另一个进程在使用那个图片.还麻烦你再帮我想想.
解决方案七:
先引用System.IObyte[]byteimg=newbyte[10000];using(FileStreamf=newSystem.IO.FileStream("c:\mai.jpg",FileMode.Open)){f.Read(byteimg,0,10000);MemoryStreamm=newMemoryStream(byteimg);Bitmapbitmap=newBitmap(m,false);this.pictureBox1.Image=bitmap;}
解决方案八:
还有没有更好的方法?
解决方案九:
友情UP一下
解决方案十:
读字节流到内存中再关闭流是比较好的方法,这种方法不会造成对文件的引用。
解决方案十一:
GC.Collect();
解决方案十二:
kkk_visual的方法可行,我以前的一个项目中也碰到这个问题了.后来查了MSDN后才知道了原因.所以如果要对图片文件做一些操作,我尽量不用..FromFile这个方法,用了这个方法会对文件产生Lock.
解决方案十三:
up
解决方案十四:
up
解决方案十五:
问完了,人跑了