0

プロセス B によってロックされている場合、プロセス A でファイル temp.jpg を File.Delete() する方法 ファイル 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

唯一の方法は、ロック プロセスが制御を次のプロセスに渡すことです。その後、例外をキャッチできます。そうしないと、ロック プロセスが終了するか制御を渡すまでファイルがロックされます。

于 2012-04-02T18:58:41.127 に答える
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

ファイルtempPathはによって読み取られます

System.Drawing.Image img

したがって、そのファイルを削除する前に、Dispose() メソッドを使用してください。

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