在创建新图像之前删除现有图像

本文关键字:图像 删除 新图像 创建 | 更新日期: 2023-09-27 17:58:52

Hi我有以下功能:

  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

这个问题有解决办法吗?如何删除现有图像?

在创建新图像之前删除现有图像

这似乎是一个奇怪的竞争条件,file.exists没有释放资源,并且试图在发布之前删除。我可能会尝试一些类似的东西。

    try
    {
        File.Delete(file);
    }
    catch
    {
       //File does not exist or another error occurred.
    }

我自己找到的。

在PageLoad中,我也使用软"文件"。我忘记处理图像:

 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();
    }

不管怎样,谢谢你的帮助!

为什么首先要删除文件?如果现有文件已经存在,你不能让它覆盖它吗?

你可以做的另一件事是暂停线程大约400毫秒,直到操作系统完成它的任务,文件被完全删除,所有流都被关闭。