如何将C:的内容放入数组?

时间:2011-02-16 11:52:57

标签: vb.net visual-studio-2010

目前正在学习数组,我有下面的代码通过驱动器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

2 个答案:

答案 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会用很少的代码为你处理它。