将上传的图片通过Graphis缩小后保存,删除时却提示“该进程无法访问文件,因为该文件正由另一进程使用。”,百思不得其解,望各位高人指

abinlover 2006-07-19 11:22:26
代码如下:
//读取图片。
Image objSourceImage = Image.FromStream( objHttpPostedFile.InputStream );

//按原比例计算缩小图的宽和高。
int NewImageBaseLength = 400;
int NewImageWidth,NewImageHeight;
if ( objSourceImage.Width > objSourceImage.Height )
{
//当图片为横的时。
NewImageWidth = NewImageBaseLength;
NewImageHeight = ( int )( ( ( double )NewImageWidth / objSourceImage.Width ) * objSourceImage.Height );
}
else
{
//当图片为竖的时。
NewImageHeight = NewImageBaseLength;
NewImageWidth = ( int )( ( ( double )NewImageHeight / objSourceImage.Height ) * objSourceImage.Width );
}

//缩小图片。
Image objDestImage = new Bitmap( NewImageWidth , NewImageHeight );
Graphics objGraphics = Graphics.FromImage( objDestImage );
objGraphics.InterpolationMode = InterpolationMode.High;
objGraphics.SmoothingMode = SmoothingMode.HighQuality;
objGraphics.Clear( Color.Transparent );
objGraphics.DrawImage( objSourceImage , new Rectangle( 0 , 0 , objDestImage.Width , objDestImage.Height ) , new Rectangle( 0 , 0 , objSourceImage.Width , objSourceImage.Height ) , GraphicsUnit.Pixel );

//保存到指定目录。
objDestImage.Save( HttpContext.Current.Server.MapPath( objConfigInfo.UploadImagePath ) + objPicture.FileName , ImageFormat.Jpeg );
objGraphics.Dispose();

因为需要,要将上传的图片按比例缩小后保存在硬盘上,当需要删除的时候就出现“该进程无法访问文件,因为该文件正由另一进程使用。”,删除时使用的是File.Delete()方法,求各位高人指点一二。
...全文
423 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyongtongxue 2006-10-04
  • 打赏
  • 举报
回复
我的程序如下:上传一个新图片以覆盖掉旧图片(图片名称被注册于数据库字段中)
也会错同样的错:“该进程无法访问文件,因为该文件正由另一进程使用”

'先将几张旧图片的名称读出来,保存于mydataset中。
strsql1 = "SELECT photo1,photo2,photo3,photo4 FROM photo_tab WHERE record_id='" + Trim(Request.QueryString("ID").ToString()) + "'"
mydataadapter = New SqlClient.SqlDataAdapter(strsql1, myconnection)
mydataset.Clear()
mydataadapter.Fill(mydataset)

'上传新的图片,先更新数据库中的旧图片名为新图片名
If File1.PostedFile.FileName.Trim.Equals("") = False Then
strsql1 = "UPDATE photo_tab SET record_date='" & a & "',photo1='" + Path.GetFileName(File1.PostedFile.FileName) + "' WHERE record_id='" + Trim(Request.QueryString("ID").ToString()) + "'"
mycommand.CommandText = strsql1
mycommand.ExecuteNonQuery()

'不管原来有无图片,先删除掉原图片,再加入新图片
Dim p As IO.File

下面的这一句总是出现,“该进程无法访问文件,因为该文件正由另一进程使用”的错误
p.Delete(Server.MapPath("") + "\photo1\" + Trim(mydataset.Tables(0).Rows(0).Item(0)))
Dim aaa As String = Path.GetFileName(File1.PostedFile.FileName).Substring(0, Path.GetFileName(File1.PostedFile.FileName).Length - 4)
fileclass = Mid(File1.PostedFile.FileName, InStrRev(File1.PostedFile.FileName, "."), Len(File1.PostedFile.FileName))
filepath = Server.MapPath("") + "\photo1\" + aaa + fileclass
File1.PostedFile.SaveAs(filepath)
End If
cat_hsfz 2006-07-20
  • 打赏
  • 举报
回复
你的代码中没有将objDestImage给Dispose掉,所以那个文件还被锁定着。
abinlover 2006-07-20
  • 打赏
  • 举报
回复
解决了,问题是在这段代码之前,已经打开了这个图片。结帖。
abinlover 2006-07-20
  • 打赏
  • 举报
回复
后来我试了把objDestImage,Dispose掉之后,还是有占用。

是不是虚拟目录中的图片是不允许删除的?
abinlover 2006-07-19
  • 打赏
  • 举报
回复
补充一下,如果直接进入目录去删也删不掉,同样提示有程序占用,当把IIS服务停掉以后就可以删掉了,启动IIS进程就又不能删除了,似乎是IIS进程在占用保存的图片,有什么办法可以解决吗?

62,046

社区成员

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

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

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

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