C# 如何使用windows窗体c删除文件#
我已经用C# 如何使用windows窗体c删除文件#,c#,winforms,delete-file,imagelist,C#,Winforms,Delete File,Imagelist,我已经用imagelist创建了listview和delete函数,该函数将使用在listview上选择的文件名删除/删除文件 但是我得到一个错误,该文件正被另一个进程使用。下面是我正在使用的代码: //// Listview with Imagelist private void listImages() { imageList.View = View.Details; imageList.Columns.Add("Images", 650); ImageList imgs
imagelist
创建了listview
和delete函数,该函数将使用在listview上选择的文件名删除/删除文件
但是我得到一个错误,该文件正被另一个进程使用。下面是我正在使用的代码:
//// 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");
}
///Listview和Imagelist
私有void列表图像()
{
imageList.View=View.Details;
imageList.Columns.Add(“图像”,650);
ImageList imgs=新的ImageList();
imgs.ImageSize=新尺寸(200130);
DirectoryInfo d=新的DirectoryInfo(adsFolder);
FileInfo[]Files={};
尝试
{
Files=d.GetFiles(“*”);
对于(var i=0;i
我发现
imagelist
导致错误,因为图像列在imagelist上。当我删除imagelist
时,它工作正常。但是,我希望在我的列表视图上保留图像列表
。如何停止或清除图像列表
,使其不再使用所选图像,并继续删除所选文件?我尝试使用imagelist.clear()
,但没有成功 您的问题是这一行:
imgs.Images.Add(Image.FromFile(Files[i].FullName));
具体地说,Image.FromFile
正在创建一个非托管位图资源,该资源具有文件的打开句柄
您需要处理为imageList创建的位图
如果您有索引,您可以执行以下操作:
imageList.Images[index].Dispose();
ImageList.Images.RemoveAt(index);
File.Delete(FileName);
您的问题是这一行:
imgs.Images.Add(Image.FromFile(Files[i].FullName));
具体地说,Image.FromFile
正在创建一个非托管位图资源,该资源具有文件的打开句柄
您需要处理为imageList创建的位图
如果您有索引,您可以执行以下操作:
imageList.Images[index].Dispose();
ImageList.Images.RemoveAt(index);
File.Delete(FileName);
有两种方法:在将图像添加到ImageList之前克隆图像,或在删除位图之前处置位图。在第二种情况下,位图文件在被引用时将被锁定。在第一种情况下,永远不会。使用(FileStream stream(…)
这很难理解。1)当您使用使用
块处理同一个一次性文件时,不需要调用Dispose
。2) 如果要在删除回调中删除文件,为什么还要费心读取该文件?有两种方法:在将图像添加到ImageList之前克隆图像,或者在删除位图之前处理位图。在第二种情况下,位图文件在被引用时将被锁定。在第一种情况下,永远不会。使用(FileStream stream(…)
这很难理解。1)当您使用使用
块处理同一个一次性文件时,不需要调用Dispose
。2) 如果要在删除回调中删除该文件,为什么还要费心读取该文件?我使用了imageList.Dispose()代码>但它不起作用。我还尝试使用ImageList.RemoveAt(index)
但是有一个错误,说ImageList不包含RemoveAt
@richard如果不想处理ImageList,则需要处理其中的项目。请检查文档,我已经更新了我的答案,我使用了imageList.Dispose()代码>但它不起作用。我还尝试使用ImageList.RemoveAt(index)
但是有一个错误,说ImageList不包含RemoveAt
@richard如果不想处理ImageList,则需要处理其中的项目。请检查文档,我也更新了我的答案