Originariamente inviato da eziogsv
Sei molto gentile nel suggerirmi di scrivere un codice più veloce... saresti stato ancor più gentile suggerendomi quale.
Come già suggerivo qual 3D fa questo codice, che utilizza una funzione ricorsiva e più efficiente del codice che hai scritto di circa il 20-25%.
codice:
Sub ListFiles(ByVal pattern As String, ByVal dir_info As DirectoryInfo)
Try
Dim info() As FileInfo = dir_info.GetFiles(pattern)
For Each fs_info As FileInfo In info
Try
Dim fs As FileStream = New FileStream(fs_info.FullName, FileMode.Open, _
FileAccess.Read, FileShare.Read)
Dim sr As StreamReader = New StreamReader(fs)
FileReader = sr.ReadToEnd
sr.Close()
fs.Close()
Catch ex As Exception
End Try
Next fs_info
info = Nothing
Dim subdirs() As DirectoryInfo = dir_info.GetDirectories()
For Each subdir As DirectoryInfo In subdirs
ListFiles(pattern, subdir)
Next subdir
Catch ex As Exception
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim s As New System.IO.DirectoryInfo("C:\Programmi")
ListFiles("*.txt", s)
End Sub
Preciso a tuo rilievo che il ciclo è inserito in un Try... Catch con relativa completa gestione degli errori... non ho messo tutto il codice perché assolutamente ininfluente ai fini della domanda da me posta.
Assolutamente non va bene, se durante la lettura dei file nella funzione:
codice:
My.Computer.FileSystem.GetFiles....
nel ciclo For...Each
codice:
For Each foundFile As String In My.Computer.FileSystem.GetFiles(.........)
Next
si verificasse un'eccezione (esempio di accesso a una directory o file) puoi si gestire l'eccezione che si verifica con un blocco Try.....Catch ma purtroppo ti perdi i restanti file che la funzione doveva restituire.