1
for (int i = 0; i < PrefixDistinctCount; i++)
                {
                    string FirstPolicy = "";

                    FirstPolicy = OriginalPics[0].ToString().Substring(26, 7);

                    var SamePoliciesQuery = OriginalPics.Where(x => Path.GetFileName(x).StartsWith(FirstPolicy));

                    foreach (string picture in SamePoliciesQuery)
                    {
                        File.Move(picture, AppVars.ProcessingPolicyImagesDirectory + picture.Substring(26, 12) + ".jpg");
                    }

                    string[] SamePolicyPics = Directory.GetFiles(AppVars.ProcessingPolicyImagesDirectory);
                    GenerateTiffFile(SamePolicyPics);

                    Directory.Delete(AppVars.ProcessingPolicyImagesDirectory, true);
                    Directory.CreateDirectory(AppVars.ProcessingPolicyImagesDirectory);

                    OriginalPics = Directory.GetFiles(SelectedDirectory);
                }

「Directory.Delete(AppVars.ProcessingPolicyImagesDirectory、true);」と表示されている最後の方 ファイルを削除できないというエラーが表示されます。コード内の何かがファイルを閉じていないかどうかが原因だと思います。誰かが何が起こっているのか知っていますか?または、この問題を解決するために「使用」を使用するにはどうすればよいですか?

IOExceptionは処理されませんでした。別のプロセスによって使用されているため、プロセスはファイル'blahblah'にアクセスできません。

これはGenerateTiffFileのコードです-

public void GenerateTiffFile(string[] SamePolicyPics)
        {
            ImageCodecInfo info = null;
            foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders())
                if (ice.MimeType == "image/tiff")
                    info = ice;

            Encoder enc = Encoder.SaveFlag;

            EncoderParameters ep = new EncoderParameters(1);
            ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame);

            Bitmap pages = null;

            int frame = 0;

            foreach (string picture in SamePolicyPics)
            {
                if (frame == 0)
                {
                    pages = (Bitmap)Image.FromFile(picture);
                    //pages.Save(picture.Substring(0, picture.Length - 3) + "tiff", info, ep);
                    pages.Save(AppVars.FinalPolicyImagesDirectory + picture.Substring(29, 7)  + ".tiff", info, ep);
                }
                else
                {
                    ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);
                    Bitmap bm = (Bitmap)Image.FromFile(picture);
                    pages.SaveAdd(bm, ep);
                }

                if (frame == SamePolicyPics.Length - 1)
                {
                    ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
                    pages.SaveAdd(ep);
                }
                frame++;
            }
        }
4

3 に答える 3

2
Bitmap bm = (Bitmap)Image.FromFile(picture);

マニュアルbmにあるように、これにより、ファイルが破棄されるまでファイルがロックされたままになります。ブロックでラップします。using

using (Bitmap bm = (Bitmap)Image.FromFile(picture))
{
   // your code
}
于 2012-07-27T13:38:41.983 に答える
1
using(Bitmap pages = (Bitmap)Image.FromFile(SamePolicyPics[0])){
        int frame = 0;

        foreach (string picture in SamePolicyPics)
        {
            if (frame == 0)
            {
                pages.Save(AppVars.FinalPolicyImagesDirectory + picture.Substring(29, 7)  + ".tiff", info, ep);
            }
            else
            {
                ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);
                using(Bitmap bm = (Bitmap)Image.FromFile(picture)){
                    pages.SaveAdd(bm, ep);
                }
            }

            if (frame == SamePolicyPics.Length - 1)
            {
                ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
                pages.SaveAdd(ep);
            }
            frame++;
        }}
于 2012-07-27T14:20:23.463 に答える
0

オブジェクトが using スコープ内にのみ存在するため、コードを書き直す必要があります。しかし、アイデアはこのようなものです

foreach (string picture in SamePolicyPics)
{
    using (pages = (Bitmap)Image.FromFile(picture))
    {
        if (frame == 0)
        {
            pages.Save(AppVars.FinalPolicyImagesDirectory + picture.Substring(29, 7)  + ".tiff", info, ep);
        }
        else
        {
            ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);
            using (Bitmap bm = (Bitmap)Image.FromFile(picture))
            {
              pages.SaveAdd(bm, ep);
            }
        }

        if (frame == SamePolicyPics.Length - 1)
        {
            ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
            pages.SaveAdd(ep);
        }
    }
    frame++;
}
于 2012-07-27T13:55:59.503 に答える