无法删除列表视图中显示的图像文件

Enr*_*ico 4 .net c# listview filelock winforms

在我的列表视图中,我在某个文件夹中显示小图像的缩略图.我按如下方式设置了listview:

var imageList = new ImageList();
foreach (var fileInfo in dir.GetFiles())
{
    try
    {
        var image = Image.FromFile(fileInfo.FullName);
        imageList.Images.Add(image);
    }
    catch
    {
        Console.WriteLine("error");
    }
}

listView.View = View.LargeIcon;
imageList.ImageSize = new Size(64, 64);
listView.LargeImageList = imageList;

for (int j = 0; j < imageList.Images.Count; j++)
{
    var item = new ListViewItem {ImageIndex = j, Text = "blabla"};
    listView.Items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)

用户可以右键单击列表视图中的图像以将其删除.我从列表视图中删除它,然后我想从文件夹中删除此图像.现在我收到文件正在使用的错误.当然这是合乎逻辑的,因为图像列表正在使用该文件.

我试图先从图像列表中删除图像,但我继续保持文件锁定.

有人能告诉我我做错了什么吗?

谢谢!

SLa*_*aks 6

您需要将文件加载到MemoryStream中,如下所示:

var image = Image.FromStream(new MemoryStream(File.ReadAllBytes(fileInfo.FullName)));
Run Code Online (Sandbox Code Playgroud)

这样,文件只会被读取一次,并且不会保持锁定状态.

编辑

您正在将图像加载到ImageList中.
由于ImageList会复制其图像,因此您应该立即处理原件,如下所示:

using (var image = Image.FromFile(fileInfo.FullName))
    imageList.Images.Add(image);
Run Code Online (Sandbox Code Playgroud)