vb .net如何从GetFiles返回的集合中删除文件名

时间:2017-09-28 13:48:38

标签: c# asp.net .net vb.net

My.Computer.FileSystem.GetFiles返回“返回表示目录中文件名的字符串的只读集合。”

我想在集合中随机选择一个文件,处理它,从列表中删除它,然后重复直到处理完所有文件。

我可以想到只将GetFiles中的集合复制到一个可变集合中。 但GetFiles最终可能会返回数百万个文件名。

3 个答案:

答案 0 :(得分:4)

只需在函数调用结束时放置一个.ToList()

我不建议从列表中间随机选择项目,而是建议改组列表并迭代洗牌项目。这比从集合中删除项目更容易。

答案 1 :(得分:1)

使用此通用函数根据Fisher-Yates Shuffle

进行随机播放
Shared r = New Random() ' must not create new Random each time

Public Shared Function Shuffle(Of T)(source As IEnumerable(Of T)) As IEnumerable(Of T)
    Dim n = source.Count()
    Dim a(n - 1) As T
    For i = 0 To n - 1
        Dim j = r.Next(0, i + 1)
        If i <> j Then
            a(i) = a(j)
        End If
        a(j) = source(i)
    Next
    Return a
End Function

然后您可以遍历洗牌列表。如果迭代,则无需删除项目。

Dim source = My.Computer.FileSystem.GetFiles("C:/")
Dim result = Shuffle(source)
For Each r In result
    ' process file
Next

答案 2 :(得分:0)

my_mutable_list = My.Computer.FileSystem.GetFiles(my_dir_path).ToList()

然后,只需从my_mutable_list中删除每个文件。