Список всех файлов во всех подкаталогах независимо от того, сколько

У меня есть следующий код, чтобы попытаться получить все имена файлов в моем родительском каталоге и всех его подкаталогах.

Код работает, но не так, как мне бы хотелось. А именно, он будет обрабатывать все файлы в родительском каталоге и все в "первом уровне" подкаталогов, но я хочу иметь возможность перейти на все уровни подкаталогов.

Как я могу это сделать?

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'ListBox1.Items.AddRange(IO.Directory.GetFiles("C:\"))

    For Each Dir As String In IO.Directory.GetDirectories("C:\Program Files")
        ' ListBox1.Items.Add(Dir)
        ListBox1.Items.AddRange(IO.Directory.GetFiles(Dir))
    Next
End Sub

1 ответ

Вот код, который делает то, что вы хотите, всего в две строки:

    Dim result As List(Of String) = System.IO.Directory.GetFiles("C:\Program Files", "*", System.IO.SearchOption.AllDirectories)
    listBox1.DataSource = result

[Кредит do @Carsten в этом посте, в котором перечислены подкаталоги, и я перешел к списку файлов и связал его с элементом ListBox. Я не знал, что рекурсивное решение уже реализовано в System.IO.]

Edit1: принимая предложение комментария.

Edit2: GetFiles не позволяет обойти эту проблему: при попытке чтения может быть настроен так, чтобы текущий пользователь не мог получить к ним доступ. Больше деталей (и решение с рекурсивной функцией) здесь.

Другие вопросы по тегам