首页 > 解决方案 > 如何使用windows窗体c#删除文件

问题描述

我已经创建了listviewwithimagelist和 delete 函数,它将使用在列表视图中选择的文件名删除/删除文件。

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

//// 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我的listview. 如何停止或清除imagelist它,使其不再使用选定的图像,以便我可以继续删除选定的文件?我尝试使用imagelist.clear()但没有用。

标签: c#winformsdelete-fileimagelist

解决方案


你的问题是这一行:

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

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

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

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

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

推荐阅读