1

我有一个列表框,其中列出了目录(不是本地的,它是通过网络)。我正在尝试遍历该列表框并删除任何空目录。但是,我注意到它只是跳过了一些空目录。我发现如果我运行循环 3 - 5 次,它会全部获取它们,但这不是很有效。

我的循环:

Dim i As Integer
i = 0
While i < ListBox1.Items.Count
   If IO.Directory.GetFiles(ListBox1.Items.Item(i), "*.*").Length = 0 Then
      ListBox1.Items.RemoveAt(i)
   End If
i = i + 1
End While

所以我只是想知道是否有一种更有效的方法来检查目录的内容,或者我可以用另一种方法来实现这一点,而不必多次运行循环。

4

1 回答 1

2

ListBox1.Items.Count每次都会重新评估,随着时间的推移丢失一些项目,你的循环会变得更短。一个快速的解决方案可能只是在循环时标记要删除的项目。

Dim toRemove As New List(Of ListBoxItem)
For Each item as ListBoxItem in ListBox1.Items
   If IO.Directory.GetFiles(item, "*.*").Length = 0 Then
      toRemove.Add(item)
   End If
Next

For Each item as ListBoxItem in toRemove
    ListBox1.Items.Remove(item)
Next

(可能有更好的方法,但这是我想不到的快速解决方案)

于 2012-10-19T11:52:32.643 回答