In tutti questi casi, è necessario trovare un sistema per elencare le sottocartelle partendo da una cartella madre, e quindi navigare poi i risultati per effettuare le operazioni che ci interessano.
Può sembrare banale ma non lo è affatto per chi, come me, si è avvicinato tardi alla programmazione e lo ha fatto fondamentalmente da autodidatta. Chiunque volesse cimentarsi in un giochino "intellettuale" è invitato a ragionare su come scriverebbe una routine che navighi una cartella e ne sfogli tutte le sottocartelle. Vi assicuro che non è esattamente banale e per ottenere questo risultato, qualche anno fa, ho dovuto scrivere 3 o 4 funzioni per un totale di un centinaio di righe.
Ultimamente, con un pò di esperienza in più sulle spalle, mi sono trovato nuovamente ad affrontare il problema e ho cercato di riscrivere quelle funzioni in una maniera un pò più "scientifica" e fondamentalmente di ottimizzarle un pò.
Per riuscirci ho dovuto apprendere il concetto, piuttosto semplice tuttavia, delle funzioni ricorsive e cioè della possibilità di richiamare una funzione o routine dalla funzione stessa.
Il risultato è quello che trovate qua sotto, con la speranza come al solito che sia utile a qualcuno.
Public Function EnumerateSubFolders(ByVal RootFolder As String) As String()
Dim FolderTree(10000) As String
DoEnumerateSubFolders(RootFolder, FolderTree)
If Array.IndexOf(FolderTree, RootFolder) = -1 Then
FolderTree(Array.IndexOf(FolderTree, Nothing)) = RootFolder
End If
Array.Resize(FolderTree, Array.IndexOf(FolderTree, Nothing))
Return FolderTree
End Function
Private Sub DoEnumerateSubFolders(ByVal RootFolder As String, _
ByRef FolderArray As String())
Dim DirList As String()
DirList = System.IO.Directory.GetDirectories(RootFolder)
For i As Integer = 0 To DirList.GetUpperBound(0)
FolderArray(Array.IndexOf(FolderArray, Nothing)) = DirList(i)
DoEnumerateSubFolders(DirList(i), FolderArray)
Next
End Sub
Nessun commento:
Posta un commento