无法使用C#从目录中删除图像

时间:2012-10-06 08:03:43

标签: c#-4.0 c#-3.0

我正在尝试使用以下语句从目录中删除图像

System.IO.File.Delete(Path);

我以前在另一个功能

中访问过这个图像
Image image=Image.FromFile(imagePath)
imageList1.Images.Add(image);

但它显示文件被另一个进程锁定的错误。我搜索了这个,发现我应该使用处理图像对象,所以我尝试了这个

using(Image image=Image.FromFile(imagePath))
    imageList1.Images.Add(image);

但这在program.cs中给出了一个错误,即参数无效且程序无法运行。 有时它会给出错误 在单个线程上启动第二个消息循环不是有效的操作。改为使用Form.ShowDialog。

我将图片列表添加到列表视图中,在删除文件之前,我正在使用以下命令清除图像列表和列表视图中的所有项目。

imageList1.Images.RemoveByKey(imageName);
imageList1.Images.Clear();
listView1.Items.RemoveByKey(imageName);
listView1.Items.Clear();
listView1.SmallImageList = null;

这是我填写listview的代码。

try
        {
            string album = albumListBox.SelectedItem.ToString();
            List<string> imageName=new List<string>();
            XmlDocument doc = new XmlDocument();
            doc.Load(Application.StartupPath + "/image.xml");
            XmlNodeList list = null;
            list = doc.SelectNodes(string.Format("/images/image"));
            listView1.Columns.Clear();
            listView1.Columns.Add("Image List",210,HorizontalAlignment.Left);
            listView1.SmallImageList = imageList1;
            listView1.Items.Clear();
            imageList1.Images.Clear();
            listView1.MultiSelect = false;
            foreach (XmlNode node in list)
            {
                if (node.ChildNodes[2].InnerText == album)
                {
                    string imagePath = Application.StartupPath + "\\images\\" + album + "\\" + node.ChildNodes[0].InnerText;
                    Image image = Image.FromFile(imagePath);
                        imageList1.Images.Add(image);
                    imageName.Add(node.ChildNodes[0].InnerText);
                }
            }
            for (int j = 0; j < this.imageList1.Images.Count; j++)
            {
                listView1.Items.Add(imageName[j],imageName[j],j);
                listView1.View = View.Details;
            }
        }
        catch (Exception e)
        {
            MessageBox.Show("No Images in this Album Please add the Images");
            showImage.Hide();
        }

这是我要删除文件的代码

var listItem = listView1.SelectedItems[0];
        string album = albumListBox.SelectedItem.ToString();
        string imageName = listItem.Text;
        string imagePath = Application.StartupPath + "\\images\\" + album + "\\" + imageName;
        XmlDocument doc = new XmlDocument();
        doc.Load(Application.StartupPath + "/image.xml");
        XmlNode node = doc.SelectSingleNode(string.Format("//image[./imageName/text()='" + imageName + "' and ./album/text()='" + album + "']"));
        if (node != null)
        {
            //remove image from directory tooV
            doc.DocumentElement.RemoveChild(node);
            doc.Save(Application.StartupPath + "/image.xml");
            imageList1.Images.RemoveByKey(imageName);
            imageList1.Images.Clear();
            listView1.Items.RemoveByKey(imageName);
            listView1.Items.Clear();
            listView1.Items[listView1.SelectedIndices[0]].Remove();
            imageList1.Images.RemoveAt(listView1.SelectedIndices[0]);
            listView1.SmallImageList = null;
            fillImageList();
            System.IO.File.Delete(imagePath);
            MessageBox.Show("Image deleted");
            fillAlbumList();
        }

1 个答案:

答案 0 :(得分:0)

只要图像仍然在imagelist1中引用,它就不会被处理掉。为了正确处理它,您还必须处理imagelist1。然后只关闭所有对Image的引用。