上传图片,修改图片大小后想删除原图片提示:文件被占用不能删除,怎么解决?谢谢

时间:2022-11-20 21:52:13
程序主要功能是上传文件后,先检查图片宽度大小,大于1800的则缩小,然后再降低图片质量,最后删除。但一删除 就提示文件已经被另一进程占用,怎么也删除不了

检查过好多次,发现是修改图片宽度的函数问题,不运行它只运行降低图片质量的函数就可以删除。。修改图片宽度的函数PercentImage()及部分代码如下,请高手帮我看看要怎么才能真正关闭占用去删除呢?谢谢

      iSource = PercentImage(iSource);
  //删除原图片文件
 iSource.Dispose();
 File.Delete(dirPath);

/// <summary>
    /// 改变图片大小
    /// </summary>
    /// <param name="srcImage"></param>
    /// <returns></returns>
    public static Bitmap PercentImage(System.Drawing.Image srcImage)
    {

        int newW = srcImage.Width < 1800 ? srcImage.Width : 1800;

        int newH = int.Parse(Math.Round(srcImage.Height * (double)newW / srcImage.Width).ToString());

        try
        {

            Bitmap b = new Bitmap(newW, newH);

            Graphics g = Graphics.FromImage(b);

            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;

            g.DrawImage(srcImage, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel);

            g.Dispose();

            return b;

        }

        catch (Exception)
        {

            return null;

        }

    }

6 个解决方案

#1


记得把srcImage.Dispose()

#2


可以试试,处理原图后"另存为"新文件.然后删除原文件
另外,上传图片处理时,应该是在内存中的,没存放到本地所以处理完之后保存就可以了,因为不存在"原文件"

#3


g.DrawImage(srcImage.clone(), new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel);
再把你的srcImage释放掉吧。。。

#4


原图片不能删除不是因为绑Graphics了,而是你打开图片的方式,打开文件时用文件流的方式转化为System.Drawing.Image就可以删除了!主要你打开图片是直接打开的图片文件,后来没有关闭他,所以删除不掉

#5


上传或是更新,建议均先放在一个临时目录中,然后处理。

日后再创建一个删除动作,定时删除昨天或以前的临时文件。

http://www.cnblogs.com/insus/archive/2009/04/08/1431986.html
http://www.cnblogs.com/insus/archive/2011/03/17/1986723.html

#6


按1楼的方法解决了,原来就是忘记关闭了。。十分感谢各位热心解答!

#1


记得把srcImage.Dispose()

#2


可以试试,处理原图后"另存为"新文件.然后删除原文件
另外,上传图片处理时,应该是在内存中的,没存放到本地所以处理完之后保存就可以了,因为不存在"原文件"

#3


g.DrawImage(srcImage.clone(), new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel);
再把你的srcImage释放掉吧。。。

#4


原图片不能删除不是因为绑Graphics了,而是你打开图片的方式,打开文件时用文件流的方式转化为System.Drawing.Image就可以删除了!主要你打开图片是直接打开的图片文件,后来没有关闭他,所以删除不掉

#5


上传或是更新,建议均先放在一个临时目录中,然后处理。

日后再创建一个删除动作,定时删除昨天或以前的临时文件。

http://www.cnblogs.com/insus/archive/2009/04/08/1431986.html
http://www.cnblogs.com/insus/archive/2011/03/17/1986723.html

#6


按1楼的方法解决了,原来就是忘记关闭了。。十分感谢各位热心解答!