как поместить содержимое C: в массив? - PullRequest
1 голос
/ 16 февраля 2011

В данный момент я изучаю массивы, и у меня есть следующий фрагмент кода, который проходит через диск 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 голосов
/ 16 февраля 2011

Я предоставляю это в качестве образца для целей обучения, но его не следует использовать как есть. Получение каждого файла из всего 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

Просто измените Order By в запросе LINQ, чтобы изменить порядок сортировки. Есть много других способов сделать сортировку, но LINQ сделает это за вас с очень небольшим количеством кода.

0 голосов
/ 16 февраля 2011

Чтобы данные были сортируемыми, вам необходимо отображать что-то, что могло бы обрабатывать эту информацию отдельно (например, класс или структура).Вы также можете обнаружить, что другой тип управления, такой как DataGridView , может быть более легким для понимания.

.NET Framework определяет интерфейс, IBindingList, который коллекции могут реализовать, чтобы показать, что они, помимо прочего, сообщают о сортировке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...