您好我有以下功能:
private void CreateRoomImage(string path)
{
Directory.CreateDirectory(path);
var file = "";
foreach (PanelView panelView in pv)
{
var RoomImage = GetRaumImageName(panelView.Title);
file = path + GetImageFile(RoomImage);
if (File.Exists(file))
{
File.Delete(file);
}
using (var img = GetRaumImage(panelView.Title, panelView))
{
ImageWriter imgWriter = new ImageWriter(ImageFormat.Bmp);
imgWriter.Save(img, file);
}
}
}
我的问题是,每次我尝试删除现有文件时,我的程序都会抛出异常:
The process can not access the file because it is being used by another process
这个问题有解决方案吗?如何删除现有图像?
答案 0 :(得分:0)
似乎这可能是一个奇怪的竞争条件,其中file.exists没有释放资源,它试图在发布之前删除。我可能会尝试这些方面的东西。
try
{
File.Delete(file);
}
catch
{
//File does not exist or another error occurred.
}
答案 1 :(得分:0)
我在自己身上找到了它。
在页面加载中我使用n#34;文件"也。我忘了处理图像:
foreach (PanelView panel in pv)
{
path = Request.PhysicalPath.Substring(0, Request.PhysicalPath.LastIndexOf('\\') + 1) + subPath + "\\" + GetRaumImageName(panel.Title);
bitMap = new Bitmap(path + ".bmp");
b0 = BmpToMonochromConverter.CopyToBpp(bitMap, 1);
// bounce.updateInterface.UpdateProductImage(b0, panel.Panel.PRODUCT_ID, "", ref update_Handle);
bitMap.Dispose();
}
无论如何,谢谢你的帮助!
答案 2 :(得分:0)
为什么要先删除文件?如果现有文件已存在,是否可以覆盖现有文件?
你可以做的另一件事是暂停线程400ms,直到操作系统完成它并且文件被完全删除并且所有流都关闭。