我正在尝试使用以下语句从目录中删除图像
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();
}
答案 0 :(得分:0)
只要图像仍然在imagelist1中引用,它就不会被处理掉。为了正确处理它,您还必须处理imagelist1。然后只关闭所有对Image的引用。