0

こんにちは私は次の関数を持っています:

  private void CreateRoomImage(string path)
{
    Directory.CreateDirectory(path);
    var file = "";



    foreach (PanelView panelView in pv)
    {
        var RoomImage = GetRaumImageName(panelView.Title);
        file = path + GetImageFile(RoomImage);

        if (File.Exists(file))
        {
            File.Delete(file);
        }

        using (var img = GetRaumImage(panelView.Title, panelView))
        {

            ImageWriter imgWriter = new ImageWriter(ImageFormat.Bmp);
            imgWriter.Save(img, file);

        }



    }

}

私の問題は、既存のファイルを削除しようとするたびに、私のプログラムが例外をスローしていることです:

The process can not access the file because it is being used by another process

この問題の解決策はありますか? 既存の画像を削除するにはどうすればよいですか?

4

3 に答える 3

0

これは、file.existsがリソースを解放しておらず、解放前に削除しようとしているという奇妙な競合状態である可能性があります。私はおそらくこれらの線に沿って何かを試みるでしょう。

    try
    {
        File.Delete(file);
    }
    catch
    {
       //File does not exist or another error occurred.
    }
于 2013-02-12T12:39:06.450 に答える
0

そもそもなぜファイルを削除するのですか?既に存在する場合、既存のファイルを上書きするようにできませんか?

あなたができるもう1つのことは、OSがそれを行い、ファイルが完全に削除され、すべてのストリームが閉じられるまで、400ミリ秒ほどスレッドを一時停止することです。

于 2013-02-12T13:40:24.163 に答える
0

私は自分でそれを見つけました。

PageLoad では、「ファイル」も使用します。画像を破棄するのを忘れました:

 foreach (PanelView panel in pv)
    {

        path = Request.PhysicalPath.Substring(0, Request.PhysicalPath.LastIndexOf('\\') + 1) + subPath + "\\" + GetRaumImageName(panel.Title);
        bitMap = new Bitmap(path + ".bmp");

        b0 = BmpToMonochromConverter.CopyToBpp(bitMap, 1);

       // bounce.updateInterface.UpdateProductImage(b0, panel.Panel.PRODUCT_ID, "", ref update_Handle);
        bitMap.Dispose();
    }

とにかく助けてくれてありがとう!

于 2013-02-12T12:45:47.033 に答える