vb.net - 从文件夹中随机选取 1000 个文件
vb.net - Pick 1000 random files from a folder
我有一个文件夹,里面有很多文件。介于 1000 和 15000 之间。
我需要从该文件夹中随机挑选 1000 个文件并将其复制到另一个文件夹。
我知道如何通过将文件列表插入数组然后随机 selecting 一个文件夹来从文件夹中获取单个随机文件,但不知道如何在避免 select 相同文件的同时获取多个文件两次。
比如我的文件夹里有1001个文件,拿前几个没问题,但到了最后,很可能会挑一个已经复制过来的文件,这需要许多人试图通过运气找到例如最后一个文件...
我的第一个想法是将文件数除以 1000。例如 1500/1000 = 1.5。然后创建一个介于 0 和 1.5 之间的随机整数。这将 return 1. 然后在第 n 个图像和第 n 个图像 * 1.5 之间执行下一个随机数。
如果文件夹有15000个文件,它会在1到15之间随机选择第一个文件,然后在6到30之间,依此类推..
但是必须有一个更聪明的解决方案..
感谢任何帮助
可随机下单:
Dim allFiles = Directory.EnumerateFiles("path")
Dim rnd As New Random()
Dim random1000 = From f In allfiles
Order By rnd.Next()
Select f
Take 1000
Dim list = random1000.ToList()
这正在使用 System.Linq
在文件列表中使用索引
Private Shared prng As New Random
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ListOfiles() As String = IO.Directory.GetFiles(BasePath)
Dim indices As IEnumerable(Of Integer)
indices = Enumerable.Range(0, ListOfiles.Length).OrderBy(Function() prng.Next).Take(1000)
For Each idx As Integer In indices
Dim fn As String = ListOfiles(idx)
Stop
Next
End Sub
我有一个文件夹,里面有很多文件。介于 1000 和 15000 之间。
我需要从该文件夹中随机挑选 1000 个文件并将其复制到另一个文件夹。 我知道如何通过将文件列表插入数组然后随机 selecting 一个文件夹来从文件夹中获取单个随机文件,但不知道如何在避免 select 相同文件的同时获取多个文件两次。
比如我的文件夹里有1001个文件,拿前几个没问题,但到了最后,很可能会挑一个已经复制过来的文件,这需要许多人试图通过运气找到例如最后一个文件...
我的第一个想法是将文件数除以 1000。例如 1500/1000 = 1.5。然后创建一个介于 0 和 1.5 之间的随机整数。这将 return 1. 然后在第 n 个图像和第 n 个图像 * 1.5 之间执行下一个随机数。
如果文件夹有15000个文件,它会在1到15之间随机选择第一个文件,然后在6到30之间,依此类推..
但是必须有一个更聪明的解决方案..
感谢任何帮助
可随机下单:
Dim allFiles = Directory.EnumerateFiles("path")
Dim rnd As New Random()
Dim random1000 = From f In allfiles
Order By rnd.Next()
Select f
Take 1000
Dim list = random1000.ToList()
这正在使用 System.Linq
在文件列表中使用索引
Private Shared prng As New Random
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ListOfiles() As String = IO.Directory.GetFiles(BasePath)
Dim indices As IEnumerable(Of Integer)
indices = Enumerable.Range(0, ListOfiles.Length).OrderBy(Function() prng.Next).Take(1000)
For Each idx As Integer In indices
Dim fn As String = ListOfiles(idx)
Stop
Next
End Sub