PDA

View Full Version : [VB .Net] Creare lista di file


birmarco
09-05-2011, 18:07
Ciao a tutti! :) Ho un piccolo problemino, vorrei creare una lista dei file contenuti in un percorso e le relative sottocartelle salvando in un array tutti i percorsi relativi.

Ho scritto questo codice ma ottengo degli errori. Inoltre mi sembra molto macchinoso qualora dovesse funzionare. Avete una soluzione migliore? :)

Function ReadFiles(ByVal path As String, ByRef Lista As ArrayList)
Dim TempFileList As System.Collections.Generic.IEnumerable(Of String) = IO.Directory.EnumerateFiles(path) 'File nel percorso

'Aggiungi file del percorso
For Each FileName As String In TempFileList
MsgBox(FileName)
Lista.Add(FileName)
Next
End Function

Function ReadFolders(ByVal path As String, ByRef Lista As ArrayList)
Dim TempFileList As System.Collections.Generic.IEnumerable(Of String) = IO.Directory.EnumerateDirectories(path) 'Dircetory nel percorso

'Aggiungi directory
For Each FolderName As String In TempFileList
MsgBox(FolderName)
Lista.Add(FolderName)
Next
End Function

Function FileList(ByVal path As String, Optional ByVal Filter As String = "") As ArrayList
Dim FList As ArrayList 'Lista dei file
Dim FolderList As ArrayList 'Lista cartelle da leggere
MsgBox(path)
ReadFiles(path, FList) 'Aggiungi file percorso principale
ReadFolders(path, FolderList) 'Aggiungi cartelle percorso principale

While (FolderList.Count > 0) 'Finchè ci sono cartelle
For Each Folder As String In FolderList
ReadFiles(Folder, FList) 'Aggiungi file della cartella
ReadFolders(Folder, FolderList) 'Aggiungi percorsi sottocartelle
FolderList.Remove(Folder) 'Elimina cartella dai percorsi da esamninare
Next
End While

Return FList
End Function

Grazie a tutti! :D

birmarco
10-05-2011, 12:18
Nessuno?

birmarco
10-05-2011, 19:01
Sono riuscito a sviluppare questa soluzione, come la trovate?

L'ho testata e funziona.

'Crea una lista di file
Sub DisplayDirTree(ByVal dir As String, ByVal ShowFiles As Boolean, ByRef lista As ArrayList, ByVal Pattern As String)
Try
If ShowFiles Then
For Each fname As String In IO.Directory.GetFiles(dir, Pattern)
lista.Add(New String(fname))
Next
End If
For Each subdir As String In IO.Directory.GetDirectories(dir)
DisplayDirTree(subdir, ShowFiles, lista, Pattern)
Next
Catch ex As Exception

End Try

End Sub

Sub SearchInPath(ByVal Path As String, ByVal Output As String, Optional ByVal Pattern As String = "*")
Dim lista As New ArrayList

DisplayDirTree(Path, True, lista, Pattern)

Using FS As New IO.FileStream(Output, IO.FileMode.Create, IO.FileAccess.Write)
Using SW As New IO.StreamWriter(FS)
For Each percorso In lista
SW.WriteLine(percorso)
Next
End Using
End Using
End Sub

Sub SearchInAllDrive(ByVal Output As String, Optional ByVal Pattern As String = "*")
Dim lista As New ArrayList

For Each rootDir As String In IO.Directory.GetLogicalDrives()
DisplayDirTree(rootDir, True, lista, Pattern)
Next

Using FS As New IO.FileStream(Output, IO.FileMode.Create, IO.FileAccess.Write)
Using SW As New IO.StreamWriter(FS)
For Each percorso In lista
SW.WriteLine(percorso)
Next
End Using
End Using
End Sub

Dovrei utilizzare questo codice per la ricerca di diversi tipi di file. E' possibile attuare una strategia per non ripetere tutto per ogni tipo di file? :)
Mi piacerebbe anche mostrare all'utente una barra di prograsso, come faccio a sapere in anticipo quanti file saranno per aggiornare dopo l'aggiunta di ogni file?