C# IO异常未处理。进程无法访问该文件,因为正在使用该文件

C# IO异常未处理。进程无法访问该文件,因为正在使用该文件,c#,C#,我写了一个程序,代码似乎在工作,但它不工作。它给出IO异常是未处理的错误。有些人说,你们应该删除一些东西,因为程序试图在同一时间使用同一个文件。请帮帮我 namespace App1508 { public partial class Form2 : Form { string goodDir = "C:\\GOOD\\"; string badDir = "C:\\BAD\\"; string fromDi

我写了一个程序,代码似乎在工作,但它不工作。它给出IO异常是未处理的错误。有些人说,你们应该删除一些东西,因为程序试图在同一时间使用同一个文件。请帮帮我

      namespace App1508
     {
       public partial class Form2 : Form
      { 

      string goodDir = "C:\\GOOD\\";
      string badDir = "C:\\BAD\\";
      string fromDir = "C:\\DENEME\\";
      List<Image> images = null;
      int index = -1;
      FileInfo[] finfos = null;

       public Form2()
      {
          InitializeComponent();
          DirectoryInfo di = new DirectoryInfo(@"C:\DENEME");
          finfos = di.GetFiles("*.jpg",SearchOption.TopDirectoryOnly);
          images = new List<Image>();
          foreach (FileInfo fi in finfos)
         {
             images.Add(Image.FromFile(fi.FullName));

         }

       }

        private void button1_Click(object sender, EventArgs e)
       {

         finfos[index].MoveTo(Path.Combine("C:\\GOOD", finfos[index].Name));

       }

         private void pictureBox1_Click(object sender, EventArgs e)
       {
        index++;
        if (index < 0 || index >= images.Count)
        index = 0;
        pictureBox1.Image = images[index];

        }

         private void button2_Click(object sender, EventArgs e)
        {
           finfos[index].MoveTo(Path.Combine("C:\\BAD", finfos[index].Name));

         }
        }
       }
这就是问题所在:

foreach (FileInfo fi in finfos)
{
    images.Add(Image.FromFile(fi.FullName));
}
Image.FromFile将打开一个文件句柄,在您处理该图像之前不会关闭它。您正在尝试在不处理首先打开该文件的图像的情况下移动该文件

我怀疑如果你在你的button1_Click和button2_Click方法中处理了相关的图像,并且意识到如果它显示在PictureBox中,你需要先将它从那里移除,你会发现它是有效的

参考: 这就是问题所在:

foreach (FileInfo fi in finfos)
{
    images.Add(Image.FromFile(fi.FullName));
}
Image.FromFile将打开一个文件句柄,在您处理该图像之前不会关闭它。您正在尝试在不处理首先打开该文件的图像的情况下移动该文件

我怀疑如果你在你的button1_Click和button2_Click方法中处理了相关的图像,并且意识到如果它显示在PictureBox中,你需要先将它从那里移除,你会发现它是有效的

参考:

我不懂,请用代码示例解释。@AytaçMacit:你不懂哪部分?在移动图像读取的文件之前,需要对图像调用Dispose。很难给出一个清晰的示例,因为我们不知道您的应用程序的结构。我现在就知道了。谢谢你对我的帮助。@JonSkeet to the rescue:我不懂,请用代码示例解释。@AytaçMacit:你不懂哪部分?在移动图像读取的文件之前,需要对图像调用Dispose。很难给出一个清晰的示例,因为我们不知道您的应用程序的结构。我现在就知道了。谢谢你对我的帮助。@JonSkeet来营救: