目前正在学习数组,我有下面的代码通过驱动器C:并在列表框中显示文件。
我想尝试扩展它以使用array.sort以便它获取文件,将它们放入数组中,然后我可以按文件名或文件大小排序。我一直在喋喋不休地讨论这个问题 - 至于如何将文件放入数组中。
如果可能的话,想要一个解释,因为它更有兴趣学习它而不是答案。
谢谢!
Private Sub btnclick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnclick.Click
Call Clearlist()
Dim strFilesinfo As System.IO.FileInfo
Dim strlength As Double = 0
Dim strname As String = ""
For Each strFiles As String In My.Computer.FileSystem.GetFiles("c:\")
strFilesinfo = My.Computer.FileSystem.GetFileInfo(strFiles)
strlength = strFilesinfo.Length
strname = strFilesinfo.Name
lstData.Items.Add(strname & " " & strlength.ToString("N0"))
Next
End Sub
End Class
答案 0 :(得分:0)
要允许数据可排序,您需要显示可以单独处理该信息的内容(即类或结构)。您可能还会发现不同类型的控件(例如DataGridView
)可能更容易掌握。
.Net框架确实定义了一个接口IBindingList
,集合可以实现这些接口以显示它们报告排序等。
答案 1 :(得分:0)
我将此作为学习用途的示例提供,但不应按原样使用。从整个C:\获取每个文件不应该这样做。除了性能问题之外,Windows安全限制实际上不会让您这样做。
这里填充的FileList只是TopDirectoryOnly。如果您将该输入更改为“AllDirectories”,它将获得所有子目录,但它将失败,如我之前所述。
Dim path As String = "C:\"
Dim dir As New System.IO.DirectoryInfo(path)
Dim fileList = dir.GetFiles("*.*", IO.SearchOption.TopDirectoryOnly)
Dim fileSort = (From file In fileList _
Order By file.Name _
Select file.Name, file.Length).ToList
For Each file In fileSort
With file
lstData.Items.Add(String.Format("{0} {1}", .Name, .Length.ToString("N0")))
End With
Next file
只需更改LINQ查询中的Order By即可更改排序的完成方式。还有很多其他方法可以进行排序,但LINQ会用很少的代码为你处理它。