c# - 如何使用windows窗体c#删除文件
问题描述
我已经创建了listview
withimagelist
和 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()
但没有用。
解决方案
你的问题是这一行:
imgs.Images.Add(Image.FromFile(Files[i].FullName));
具体来说Image.FromFile
,是创建一个非托管位图资源,该资源具有文件的打开句柄。
您将需要Dispose
为 imageList 创建的位图。
如果您有索引,则可以执行以下操作:
imageList.Images[index].Dispose();
ImageList.Images.RemoveAt(index);
File.Delete(FileName);
推荐阅读
- c# - 碰撞后音频剪辑不播放
- xamarin.forms - Android 7.1 和 Android 8.0 的 SQLite 问题 - Xamarin Forms
- laravel - 如何克隆、编辑和使用 3rd 方 Laravel 插件
- javascript - URL 未在 React 中获取数据
- python - 用于检查图像中是否存在红色并调用其他函数的 Python 脚本
- python - 美丽汤。错误的元素索引
- xamarin - 如何在 Xamarin 本机示例项目中通过导航菜单打开内容页面
- angular - 角度:如何避免状态共享
- mysql - 提高选择查询性能和可读性
- r - (通过更新解决)测量句子与目标文档句子的相似度(错误消息)