Список всех файлов во всех подкаталогах независимо от того, сколько
У меня есть следующий код, чтобы попытаться получить все имена файлов в моем родительском каталоге и всех его подкаталогах.
Код работает, но не так, как мне бы хотелось. А именно, он будет обрабатывать все файлы в родительском каталоге и все в "первом уровне" подкаталогов, но я хочу иметь возможность перейти на все уровни подкаталогов.
Как я могу это сделать?
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 не позволяет обойти эту проблему: при попытке чтения может быть настроен так, чтобы текущий пользователь не мог получить к ним доступ. Больше деталей (и решение с рекурсивной функцией) здесь.