如何使用 windows 形式删除文件 c#

How to delete file using windows form c#

我已经使用 imagelist 创建了 listview 并删除了 delete/remove 使用在列表视图中选择的文件名的文件的功能。

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

//// 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 它工作正常。但是我想在 listview 上保留 imagelist。我怎样才能停止或清除 imagelist 以便它不再使用选定的图像,以便我可以继续删除选定的文件?我尝试使用 imagelist.clear() 但它没有用。

你的问题是这一行:

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

具体来说,Image.FromFile 正在创建一个非托管位图资源,该资源具有您的文件的打开句柄。

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

如果你有索引,你可以这样做:

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