2010-03-11 14 views
5

Questa è la mia prima domanda StackOverflow, sto imparando VB e ho alcuni problemi con ottenere un elenco di tutte le cartelle/directory sul sistema. Sto utilizzando il codice incluso qui e sembra funzionare fino a raggiungere la cartella cestino, e le cartelle qualche altro sistemaOttieni tutte le cartelle/elenco di directory in 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 

Qualcuno mi può aiutare con questo? Mi piacerebbe sapere cosa sta causando questo, e una buona soluzione, o un modo alternativo per farlo.

Grazie in anticipo.

+1

Qual è l'errore o il comportamento inatteso che stai vedendo? –

risposta

6

L'accesso ad alcune cartelle non è consentito. È possibile utilizzare un blocco Try-Catch attorno allo Directory.GetDirectories(StartPath) oppure è possibile controllare preventivamente le proprietà della cartella.

+0

Grazie xpda, ho provato un "errore riprendere dopo senza molta fortuna, ma un" Try Catch "funziona perfettamente per le mie esigenze, questo richiede circa 2 secondi sul mio SSD per trovare 50k di cartelle e circa 12 secondi sui miei laptop 5400 RPM guidare per trovare 32k di cartelle .... abbastanza veloce per i miei bisogni in ogni caso Grazie mille! Se qualcuno ha un suggerimento migliore su come recuperare la struttura completa della directory sia più veloce o in un modo più .net per favore per favore pubblicare. –

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

Hai un doppio End Sub nel tuo codice!

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 
Problemi correlati