如何使用Windows Form C#删除文件

时间:2019-04-02 03:26:24

标签: c# winforms delete-file imagelist

我已经用listview创建了imagelist并具有删除功能,该功能将使用在列表视图上选择的文件名来删除/删除文件。

但是我得到一个错误,该文件正在被另一个进程使用。下面是我正在使用的代码:

//// Listview with Imagelist
private void listImages()
{
   imageList.View = View.Details;
   imageList.Columns.Add("Images", 650);
   ImageList imgs = new ImageList();
   imgs.ImageSize = new Size(200, 130);

   DirectoryInfo d = new DirectoryInfo(adsFolder);
   FileInfo[] Files = {};

   try
   {
      Files = d.GetFiles("*");

      for (var i = 0; i < Files.Count(); i++)
      {
         imgs.Images.Add(Image.FromFile(Files[i].FullName));
         imageList.Items.Add(Files[i].Name, i);
      }

      imageList.SmallImageList = imgs;
   }

   catch (Exception e)
   {
       MessageBox.Show(e.Message);
   }
}

//// Delete function
private void deleteFile_Click(object sender, EventArgs e)
{
   using (FileStream stream = new FileStream("Selected Image"), FileMode.Open, FileAccess.Read))
   {
      stream.Dispose();
   }

   File.Delete("Selected Image");
}

我发现imagelist引起了错误,因为该图像已在imagelist中列出。当我移除imagelist时,它可以正常工作。但是我想保留imagelist上的listview。如何停止或清除imagelist,以使其不再使用所选的图像,从而可以继续删除所选的文件?我尝试使用imagelist.clear(),但没有用。

1 个答案:

答案 0 :(得分:2)

您的问题是这行

imgs.Images.Add(Image.FromFile(Files[i].FullName));

特别是Image.FromFile会创建一个非托管位图资源,该资源具有打开的文件句柄。

您将需要Dispose为imageList创建的位图。

如果您有索引,则可以执行以下操作

imageList.Images[index].Dispose();
ImageList.Images.RemoveAt(index);
File.Delete(FileName);