File.Delete()文件temp.jpg与进程A如果被进程B锁定。如何关闭处理文件temp.jpg
IOExceoption: 该进程无法访问该文件,因为它正由另一个进程使用
protected void ButtonJcrop_Click(object sender, EventArgs e)
{
MembershipUser user = Membership.GetUser();
String tempPath = Server.MapPath("..") + @"\Users\" + user.ProviderUserKey.ToString() + @"\temp.gif";
System.Drawing.Image img = System.Drawing.Image.FromFile(tempPath);
Bitmap bmpCropped = new Bitmap(100, 100);
Graphics g = Graphics.FromImage(bmpCropped);
Rectangle rectDestination = new Rectangle(0, 0, bmpCropped.Width, bmpCropped.Height);
Rectangle rectCropArea = new Rectangle(Int32.Parse(hfX.Value), Int32.Parse(hfY.Value), Int32.Parse(hfWidth.Value), Int32.Parse(hfHeight.Value));
g.DrawImage(img, rectDestination, rectCropArea, GraphicsUnit.Pixel);
String mapPath = @"\Users\" + user.ProviderUserKey.ToString() + @"\" + user.ProviderUserKey.ToString() + ".gif";
bmpCropped.Save(Server.MapPath("..") + mapPath);
// bmpCropped.Save(Server.MapPath("..") + @"\Images\thumbs\CroppedImages\" + Session["WorkingImage"]);
imCropped.ImageUrl = Request.ApplicationPath + mapPath;
**File.Delete(tempPath);**
PlaceHolderImCropped.Visible = true;
}
答案 0 :(得分:1)
等待进程B释放资源。
<强>人提示:强> 进程B出于某种原因锁定了文件。在我认为不是病态的任何情况下偷窃它都是一个坏主意。
如果你处于病态:
还有其他技巧吗?是。但是,根据定义,它们并不安全,所以不要这样做。
答案 1 :(得分:0)
唯一的方法是锁定过程将控制权传递给下一个过程。然后你可以捕获异常,否则文件将被锁定,直到锁定过程终止或通过控制。
答案 2 :(得分:0)
文件tempPath
由
System.Drawing.Image img
因此,在删除该文件之前,只需使用Dispose()方法。
img.Dispose();
答案 3 :(得分:0)
Bitmap bmpCropped = new Bitmap(100, 100);
Graphics g = Graphics.FromImage(bmpCropped);
Rectangle rectDestination = new Rectangle(0, 0, bmpCropped.Width, bmpCropped.Height);
Rectangle rectCropArea = new Rectangle(Int32.Parse(hfX.Value), Int32.Parse(hfY.Value), Int32.Parse(hfWidth.Value), Int32.Parse(hfHeight.Value));
using (System.Drawing.Image img = System.Drawing.Image.FromFile(tempPath)) g.DrawImage(img, rectDestination, rectCropArea, GraphicsUnit.Pixel);