【发布时间】:2017-03-26 09:12:12
【问题描述】:
我将一些文件添加到按钮上的列表框中:
if (Directory.Exists(DirString))
{
DirectoryInfo dirETC = new DirectoryInfo(DirString);
FileInfo[] Files = dirETC.GetFiles("*.txt");
foreach (FileInfo file in Files)
{
listBox1.Items.Add(file.FullName);
}
如果用户单击删除按钮,我想删除列表框中的所有文件,如下所示:
try
{
listBox1.BeginUpdate();
for (int i = 0; i < listBox1.Items.Count; i++)
{
string filename = listBox1.Items[i].ToString();
if (File.Exists(filename))
{
File.Delete(filename);
listBox1.Items.Remove(filename);
}
}
listBox1.EndUpdate();
}
catch (Exception)
{
return;
}
上面的代码有效,但每次我点击删除所有按钮时它只删除一个文件。我想我需要在这里添加某种 foreach 循环来遍历这些项目,但我不确定最好的方法是什么。
【问题讨论】:
-
您不应该简单地捕获异常而不正确处理它们。在这里你会得到一个
OutOfBoundsException,因为你正在从你正在迭代的集合中删除元素 -
目录中有多少个文件?根据逻辑,它将删除目录中的一半文件,因为 listview1.Item.Remove 会将 items.count 减少 1。因此最终迭代次数将减少到 items.count/2。
-
@ChetanRanpariya 文件将始终更改编号。 Flat Eric,谢谢,我只是在输入一个快速测试,但我会实现正确的异常(IndexOutOfRangeException)。