一尘不染

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

c#

我正在尝试以编程方式删除文件,但是该文件显然正在被另一个进程(恰好是我的程序)使用。基本上,该程序使用FromUri创建位图从文件夹中加载图像,然后将其加载到Image数组中,该数组又成为堆栈面板的子级。效率不是很高,但是可以。

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

还有其他方法可以从应用程序的进程中删除文件吗?


阅读 308

收藏
2020-05-19

共1个答案

一尘不染

为了在加载后释放图像文件,您必须通过设置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属性而不是来从FileStream加载图像UriSource

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

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