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

sunrainnet 2017-12-15 02:19:39
程序主要功能是上传文件后,先检查图片宽度大小,大于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;

}

}
...全文
553 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunrainnet 2017-12-18
  • 打赏
  • 举报
回复
按1楼的方法解决了,原来就是忘记关闭了。。十分感谢各位热心解答!
insus 2017-12-18
  • 打赏
  • 举报
回复
上传或是更新,建议均先放在一个临时目录中,然后处理。 日后再创建一个删除动作,定时删除昨天或以前的临时文件。 http://www.cnblogs.com/insus/archive/2009/04/08/1431986.html http://www.cnblogs.com/insus/archive/2011/03/17/1986723.html
xinbada1985 2017-12-15
  • 打赏
  • 举报
回复
原图片不能删除不是因为绑Graphics了,而是你打开图片的方式,打开文件时用文件流的方式转化为System.Drawing.Image就可以删除了!主要你打开图片是直接打开的图片文件,后来没有关闭他,所以删除不掉
  • 打赏
  • 举报
回复
g.DrawImage(srcImage.clone(), new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel); 再把你的srcImage释放掉吧。。。
mirrorspace 2017-12-15
  • 打赏
  • 举报
回复
可以试试,处理原图后"另存为"新文件.然后删除原文件 另外,上传图片处理时,应该是在内存中的,没存放到本地所以处理完之后保存就可以了,因为不存在"原文件"
bidisty 2017-12-15
  • 打赏
  • 举报
回复
记得把srcImage.Dispose()

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧