如果被进程 B 锁定,如何使用进程 A 删除文件 temp.jpg
Posted
技术标签:
【中文标题】如果被进程 B 锁定,如何使用进程 A 删除文件 temp.jpg【英文标题】:How to delete file temp.jpg with process A if locked by process B 【发布时间】:2012-04-16 10:50:34 【问题描述】:如果 File.Delete() 文件 temp.jpg 被进程 B 锁定,进程 A 如何。close 如何处理文件 temp.jpg
IOExce 选项: 该进程无法访问该文件,因为它正被另一个进程使用
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;
【问题讨论】:
How can I unlock a file that is locked by a process in .NET的可能重复 【参考方案1】:等待进程 B 释放资源。
专业提示: 进程 B 锁定文件是有原因的。在我能想到的任何情况下,偷它都是一个坏主意,这不是病态的。
如果您处于病态:
-
走出病态。你只是在挖掘
自己在更深。
终止进程 B。
还有其他技术吗?是的。但是,它们根据定义是不安全的,所以不要那样做。
【讨论】:
【参考方案2】:唯一的方法是锁定进程将控制权传递给下一个进程。然后您可以捕获异常,否则文件将被锁定,直到锁定过程终止或通过控制。
【讨论】:
【参考方案3】:文件tempPath
被
System.Drawing.Image img
因此,在删除该文件之前,只需使用 Dispose() 方法即可。
img.Dispose();
【讨论】:
【参考方案4】: 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);
【讨论】:
以上是关于如果被进程 B 锁定,如何使用进程 A 删除文件 temp.jpg的主要内容,如果未能解决你的问题,请参考以下文章