2010-03-11 28 views
5

Esta es mi primera pregunta de Stackoverflow, estoy aprendiendo VB y tengo algunos problemas para obtener una lista de todas las carpetas/directorios en el sistema. Estoy usando el código incluido aquí y parece que funciona hasta que llega a la carpeta de la papelera de reciclaje, y carpetas algún otro sistemaObtener toda la lista de carpetas/directorios en VB.net

Sub main() 

    Dim DirList As New ArrayList 
    GetDirectories("c:\", DirList) 


    For Each item In DirList 
     'add item to listbox or text etc here 
    Next 

End Sub 

Sub GetDirectories(ByVal StartPath As String, ByRef DirectoryList As ArrayList) 
    Dim Dirs() As String = Directory.GetDirectories(StartPath) 
    DirectoryList.AddRange(Dirs) 

    For Each Dir As String In Dirs 
     GetDirectories(Dir, DirectoryList) 
    Next 
End Sub 

¿Puede alguien ayudarme con esto? Me gustaría saber qué está causando esto primero, y una buena solución, o una forma alternativa de hacerlo.

Gracias de antemano.

+1

¿Cuál es el error o el comportamiento inesperado que está viendo? –

Respuesta

6

No se permite el acceso a algunas carpetas. Puede usar un bloque Try-Catch alrededor del Directory.GetDirectories(StartPath), o puede verificar las propiedades de la carpeta de antemano.

+0

Gracias xpda, intenté un "curriculum vitae de error siguiente sin mucha suerte, pero un" Try Catch "funciona perfecto para mis necesidades, esto lleva unos 2 segundos en mi SSD para encontrar 50k de carpetas y alrededor de 12 segundos en mis laptops 5400RPM conducir para encontrar 32k de carpetas ... lo suficientemente rápido para mis necesidades de todos modos Gracias, ¡aprobado! Si alguien tiene una mejor sugerencia de cómo buscar la estructura completa de directorios más rápido o de una manera más amigable. –

4
Try 
    Dim Dirs() As String = Directory.GetDirectories(StartPath) 
    DirectoryList.AddRange(Dirs) 
    For Each Dir As String In Dirs 
     GetDirectories(Dir, DirectoryList) 
    Next 
    Catch ex As Exception 
End Try 
3

Usted tiene un doble End Sub en su código!

Sub main() 

    Dim DirList As New ArrayList 
    GetDirectories("c:\", DirList) 


    For Each item In DirList 
     'add item to listbox or text etc here 
    Next 

' !!!!!! 
End sub 

End Sub 
' !!!!!! 

Sub GetDirectories(ByVal StartPath As String, ByRef DirectoryList As ArrayList) 
    Dim Dirs() As String = Directory.GetDirectories(StartPath) 
    DirectoryList.AddRange(Dirs) 

    For Each Dir As String In Dirs 
     GetDirectories(Dir, DirectoryList) 
    Next 
End Sub 
Cuestiones relacionadas