删除另一个进程正在使用的文件

我试图编程删除一个文件,但该文件显然是由另一个进程(这恰好是我的程序)使用。 基本上,程序通过使用FromUri从一个文件夹中加载图像来创build一个Bitmap,然后将其加载到一个Image数组中,该数组又成为一个堆栈面板的子组件。 不是非常有效,但它的工作原理。

我已经尝试清除堆栈面板的孩子,并使数组中的图像为空,但我仍然得到IOException告诉我,该文件正在被另一个进程使用。

有没有其他的方式来从我的应用程序的进程中删除文件?

为了在加载后发布图像文件,您必须通过设置BitmapCacheOption.OnLoad标志来创build图像。 一个办法是这样的:

 string filename = ... BitmapImage image = new BitmapImage(); image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.UriSource = new Uri(filename); image.EndInit(); 

虽然设置BitmapCacheOption.OnLoad在从本地文件Uri加载的BitmapImage上工作,但这是没有logging的。 因此,可能更好或更安全的方法是通过设置StreamSource属性而不是UriSource从FileStream加载图像:

 string filename = ... BitmapImage image = new BitmapImage(); using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) { image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.StreamSource = stream; image.EndInit(); } 

它可能是垃圾收集问题。

 System.GC.Collect(); System.GC.WaitForPendingFinalizers(); File.Delete(picturePath); 

另一种方法是删除文件。 使用FileStream类加载文件,并通过stream.Dispose();释放文件。 它永远不会给你例外“进程无法访问文件”,因为它正在被另一个进程使用。“

 using (FileStream stream = new FileStream("test.jpg", FileMode.Open, FileAccess.Read)) { pictureBox1.Image = Image.FromStream(stream); stream.Dispose(); } // delete your file. File.Delete(delpath); 

对不起我英文不好。 我希望帮助:

 var uploadedFile = Request.Files[0]; //Get file var fileName = Path.GetFileName(uploadedFile.FileName); //get file name string fileSavePath = Server.MapPath(fileName); //get path uploadedFile.SaveAs(fileSavePath); //saving file FileInfo info = new FileInfo(fileSavePath);//get info file //the problem ocurred because this, FileStream s = new FileStream(fileSavePath, FileMode.Open); //openning stream, them file in use by a process System.IO.File.Delete(fileSavePath); //Generete a error //problem solved here... s.Close(); s.Dispose(); System.IO.File.Delete(fileSavePath); //File deletad sucessfully!