0

フォルダ内の画像ファイルは削除できません。私はそれがロックされて別のプロセスによって使用されていることを知っていますが、それを保持しているプロセスと、それを削除できるように画像ファイルのロックを解除する方法がわかりません。すべてのループの終わりにメソッドを入れて推測しようとしまし.Dispose()たが、運がありませんでした。> _ <

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;

using System.Net;
using System.Drawing;
using System.IO;

using AForge.Video;
using AForge.Video.VFW; //video recording

namespace example
{
    public partial class LiveRecording2 : System.Web.UI.Page
    {
        AVIWriter writer = new AVIWriter("MSVC");

        protected void Page_Load(object sender, EventArgs e)
        {

        }

         private void Get1Image()
        {
             for (int i = 0; i < 11; i++)
             {
                string ImagePath = Server.MapPath("~\\Videos\\liveRecording2\\") + string.Format("{0}", i + 1) + ".jpg";
                string ip = "http://example.ip.com:portNo/jpeg.cgi";
                string sourceURL = ip;
                WebRequest req = (WebRequest)WebRequest.Create(sourceURL);
                req.Credentials = new NetworkCredential("userName", "password");
                WebResponse resp = req.GetResponse();
                Stream stream = resp.GetResponseStream();
                Bitmap bmp = (Bitmap)Bitmap.FromStream(stream);
                bmp.Save(ImagePath);
            }
        }

        private void doRecording()
        {
            string ImagePath = Server.MapPath("~\\Videos\\liveRecording2\\");
            string SavingPath = Server.MapPath("~\\Videos\\liveRecording2\\"); //recorded video path
            string VideoName = "ICS-" + String.Format("{0:yyyyMMdd_hhmmss}", DateTime.Now) + ".avi";
            writer.Open(SavingPath + VideoName, 640, 480); //create an AVI file and open it for images adding

            // create frame image
            Bitmap image = new Bitmap(320, 240);
            //var cubit = new AForge.Imaging.Filters.ResizeBilinear(320, 240);
            string[] files = Directory.GetFiles(ImagePath);
            writer.FrameRate = 25;
            int index = 0;
            int failed = 0;
            foreach (var item in files)
            {
                index++;
                try
                {
                    image = Image.FromFile(item) as Bitmap;
                    //image = cubit.Apply(image);

                    for (int i = 0; i < 5; i++)
                    {
                        writer.AddFrame(image);
                    }
                }
                catch
                {
                    failed++;
                }
                //this.Text = index + " of " + files.Length + ". Failed: " + failed;
             }
            writer.Close();
            writer.Dispose();
            this.Label1.Text = "status: Video was successfully created";
            this.Label2.Text = "Video Path: ~/Videos/liveRecording2/" + VideoName;
            DeleteImage();
        }

       protected void Button1_Click(object sender, EventArgs e)
        {
            Get1Image();
            doRecording();
        }

        public void DeleteImage()
        {
            DirectoryInfo di = new DirectoryInfo(Server.MapPath("~\\Videos\\liveRecording2\\"));
            FileInfo[] files = di.GetFiles("*.jpg");
                             //.Where(p => p.Extension == ".jpg").ToArray();
            foreach (FileInfo file in files)
            {
                file.Delete(); // **error here**
            }

            this.Label3.Text = "Image deleted";
        }
    }
} 
4

1 に答える 1

0

あなたの問題はおそらくここにあります:

image = Image.FromFile(item) as Bitmap;

コードのそのusingビットを:でラップしてみてください

using(image = Image.FromFile(item) as Bitmap)
{
   //  rest here
}
于 2012-10-15T04:35:14.217 に答える