bra*_*mco 25 c# wpf file process delete-file
我正在尝试以编程方式删除文件,但该文件显然正在被另一个进程使用(这恰好是我的程序).基本上,程序通过使用FromUri来创建一个Bitmap来加载文件夹中的图像,然后将其加载到Image数组中,然后该数组又成为stackpanel的子项.不是很有效,但它的工作原理.
我已经尝试清除stackpanel的子节点,并使数组中的图像为null,但我仍然得到IOException告诉我该文件正由另一个进程使用.
有没有其他方法从我的应用程序的进程中删除该文件?
kpl*_*rm7 97
它可能是垃圾收集问题.
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
File.Delete(picturePath);
Run Code Online (Sandbox Code Playgroud)
Cle*_*ens 21
要在加载后释放图像文件,您必须通过设置BitmapCacheOption.OnLoad标志来创建图像.一种方法是这样做:
string filename = ...
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(filename);
image.EndInit();
Run Code Online (Sandbox Code Playgroud)
虽然设置BitmapCacheOption.OnLoad适用于从本地文件Uri加载的BitmapImage,但这一点无法记录.因此,可能更好或更安全的方法是从FileStream加载图像,方法是设置StreamSource属性而不是UriSource:
string filename = ...
BitmapImage image = new BitmapImage();
using (var stream = File.OpenRead(filename))
{
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = stream;
image.EndInit();
}
Run Code Online (Sandbox Code Playgroud)
小智 7
另一种方法是删除文件.使用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);
Run Code Online (Sandbox Code Playgroud)