【发布时间】:2016-11-20 22:46:26
【问题描述】:
我正在使用WinForms。我使用picturebox 制作了一个简单的图像查看器应用程序来显示我的图像。我做了一种创建临时文件的方法。这些文件始终是图片文件。当我的应用程序使用图像完成时,我希望能够在位于 FormClosing 的文件上删除这些临时文件:C:\Users\taji01\AppData\Local\Temp\8bd93a0dec76473bb82a12488fd350af 要做到这一点,我不能简单地调用 File.Delete(C://picture.jpg) 因为我的应用程序即使我的应用程序中显示了另一张图片,仍在使用它们。所以我试图处理它,但我不知道该怎么做。我应该使用 using 语句吗?有没有更好的方法来处理和删除文件,或者有没有办法让它工作?
_fileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
File.Copy(imagePath, _fileName);
_stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileOptions.DeleteOnClose);
this._Source = Image.FromStream(_stream);
错误:“进程无法访问文件 C:\picture.jpg,因为它正被另一个进程使用”抛出异常:msconrlib.dll 中的“System.IO.IO.Exception”(进程无法访问该文件'C:\picture.jpg' 因为它正被另一个进程使用")
【问题讨论】:
-
Path.GetTempFileName() -
来自docs for
Image.FromFile():文件保持锁定直到图像被释放。所以你必须先释放图像。或者在内存中制作一份副本并丢弃原件。见stackoverflow.com/questions/6576341/… -
来自
Image.FromStream()的文档:您必须在图像的生命周期内保持流打开。 -
这里的问题不止一个。但请注意异常消息,它不是在谈论临时文件。 C:\picture.jpg 只能是 imagePath,不能是 _fileName。因此,您在 magePath 上做错了我们看不到的其他事情。只需积极地解决这个问题,忘记临时文件,因为它们没有解决任何问题。在分配
_Source之前,您可能不再需要旧的了,因此请丢弃它。或者,如果您无法弄清楚,则通过使用 Bitmap(Image) 构造函数创建内存中的副本来避免所有锁定,以便您可以立即处理。
标签: c# .net winforms file delete-file