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

我正在尝试以编程方式删除文件,但该文件显然正在被另一个进程使用(这恰好是我的程序).基本上,程序通过使用FromUri来创建一个Bitmap来加载一个文件夹中的图像,然后将其加载到一个Image数组中,该数组又成为一个stackpanel的子项.不是很有效,但它的工作原理.

我已经尝试清除stackpanel的子节点,并使数组中的图像为null,但我仍然得到IOException告诉我该文件正由另一个进程使用.

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

最佳答案
要在加载后释放图像文件,您必须通过设置BitmapCacheOption.OnLoad标志来创建图像.一种方法是这样做:

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

虽然设置BitmapCacheOption.OnLoad适用于从本地文件Uri加载的BitmapImage,但这是无法记录的.因此,通过设置StreamSource属性而不是UriSource,可能更好或更安全的方法是从FileStream加载图像:

string filename = ...
BitmapImage image = new BitmapImage();

using (var stream = File.OpenRead(filename))
{
    image.BeginInit();
    image.CacheOption = BitmapCacheOption.OnLoad;
    image.StreamSource = stream;
    image.EndInit();
}

转载注明原文:c# – 删除另一个进程正在使用的文件 - 代码日志