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 に答える