0

如果被进程 B 锁定,File.Delete() 文件 temp.jpg 如何与进程 A 一起使用。close 如何处理文件 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;
}
4

4 回答 4

1

等待进程 B 释放资源。

专业提示: 进程 B 锁定文件是有原因的。在我能想到的任何情况下,偷它都是一个坏主意,这不是病态的。

如果您处于病态:

  1. 走出病态的境地。你只是在更深地挖掘自己。
  2. 杀死进程 B。

还有其他技术吗?是的。然而,根据定义,它们并不安全,所以不要那样做。

于 2012-04-02T20:24:44.307 回答
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);
于 2012-04-09T13:29:38.870 回答
0

唯一的方法是锁定进程将控制权传递给下一个进程。然后您可以捕获异常,否则文件将被锁定,直到锁定过程终止或通过控制。

于 2012-04-02T18:58:41.127 回答
0

文件tempPath被读取

System.Drawing.Image img

因此,在删除该文件之前,只需使用 Dispose() 方法。

img.Dispose();
于 2012-04-09T07:35:36.373 回答