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

时间:2013-02-12 12:29:00

标签: c# asp.net image bitmap

您好我有以下功能:

  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

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

3 个答案:

答案 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,直到操作系统完成它并且文件被完全删除并且所有流都关闭。