Puedes usar Try/Catch para saltar el error o también, pero te van a regañar, "On Error Resume Next"
Código
Task.Factory.StartNew(Sub() Me.Invoke(Sub() Me.Cursor = Cursors.WaitCursor) For Each vUnidad As String In Directory.GetLogicalDrives() ListBox1.Invoke(DirectCast(Sub() ListBox1.Items.Add(vUnidad), MethodInvoker)) Next vUnidad ''Recorrer las unidades detectadas Dim Pdisco As String For i As Integer = 0 To Me.ListBox1.Items.Count - 1 Pdisco = CStr(ListBox1.Items(i)) 'Obtener los ficheros de las unidades Try Dim DirInfo As New DirectoryInfo(Pdisco) Next Catch ex As Exception End Try Next End Sub).ContinueWith(Sub() Me.Invoke(Sub() Me.Cursor = Cursors.Arrow) End Sub)
De todos modos solo te va a listar los archivos inmediatos de un directorio pero no todos los archivos únicos de cada directorio y subdirectorios como carpetas y demás. Ni tampoco archivos ocultos. Por no decir que ese código no está bien implementado para ese objetivo.
Te lo he metido dentro de Task.Factory.StartNew(Sub() End Sub) para evitar que el programa se quede bloqueado mientras busca.
Ahora mismo no tengo nada para listar absolutamente todos los archivos y archivos ocultos. Tendría que mirármelo, porque nunca lo he hecho, por lo menos con VB.NET
chau
he estado mirándome el tema y esto sería creo más o menos lo que buscas pero..... como digo no lista todos los archivos, en este caso los de un directorio y sus subdirectorios.
Código
Dim strDirPath As String = "C:\" Dim astrSubDirectories As String() = Directory.GetDirectories(strDirPath) Dim strSubDirectory As String For Each strSubDirectory In astrSubDirectories Dim direct As String = strSubDirectory.Remove(0, strSubDirectory.LastIndexOf("\") + 1) Try Dim astrFiles As String() = Directory.GetFiles(strDirPath & direct) ListBox1.Items.Add(strSubDirectory) For Each strFileName In astrFiles ListBox1.Items.Add(strFileName) Next Catch exc As Exception End Try Next Try Dim DirInfo As New DirectoryInfo(strDirPath) Next Catch ex As Exception End Try
El error de Acceso denegado, es porque hay carpetas protegidas por el sistema como Document and Settings que no deja que sean abiertas.
Código
Dim allDrives() As DriveInfo = DriveInfo.GetDrives() Try Dim strSubDirectory As String For Each strSubDirectory In astrSubDirectories Dim direct As String = strSubDirectory.Remove(0, strSubDirectory.LastIndexOf("\") + 1) Try ListBox1.Items.Add(strSubDirectory) For Each strFileName In astrFiles ListBox1.Items.Add(strFileName) Next Catch exc As Exception End Try Next Try Next Catch ex As Exception 'MessageBox.Show(ex.Message) End Try Catch ex As Exception 'MessageBox.Show(ex.Message) End Try Next
Pues finalmente creo que di con la solución. Bastaba con añadir esto ,
Código:
"*", SearchOption.AllDirectories
Código:
Dim astrFiles As String() = Directory.GetFiles("C:\" & direct, "*", SearchOption.AllDirectories)
Aquí te muestra todos los archivos de un directorio (con la ruta completa)[/size]
Código
Dim strDrive As String = "D:\" '[Drive].ToString Dim DriveSubDirectories As String() = Directory.GetDirectories(strDrive) For Each strSubDirectory As String In DriveSubDirectories Dim strFolder As String = strSubDirectory.Remove(0, strSubDirectory.LastIndexOf("\") + 1) ListBox1.Items.Add(strSubDirectory) '<---Carpeta Try Dim strFiles As String() = Directory.GetFiles(strDrive & strFolder, "*", SearchOption.AllDirectories) For Each strFileName In strFiles ListBox1.Items.Add(strFileName) '<--Archivo con ruta completa Next Catch ex As Exception ' MessageBox.Show(ex.Message) End Try 'strFiles Next 'strSubDirectory Try Dim DirInfo As New DirectoryInfo(strDrive) Next Catch ex As Exception End Try 'DirInfo
Pero tarda bastante... según el número de archivos y subdirectorios...
Para obtener todos de todas las unidades
Código
Dim allDrives() As DriveInfo = DriveInfo.GetDrives() Try Dim DriveSubDirectories As String() = Directory.GetDirectories(strDrive) For Each strSubDirectory As String In DriveSubDirectories Dim strFolder As String = strSubDirectory.Remove(0, strSubDirectory.LastIndexOf("\") + 1) ListBox1.Items.Add(strSubDirectory) '<---Carpeta Try Dim strFiles As String() = Directory.GetFiles(strDrive & strFolder, "*", SearchOption.AllDirectories) For Each strFileName In strFiles ListBox1.Items.Add(strFileName) '<--Archivo con ruta completa Next 'strFileName Catch ex As Exception ' MessageBox.Show(ex.Message) End Try 'strFiles Next 'strSubDirectory Try Dim DirInfo As New DirectoryInfo(strDrive) Next 'Files Catch ex As Exception ' MessageBox.Show(ex.Message) End Try 'DirInfo Catch ex As Exception MessageBox.Show(ex.Message) End Try 'Drives Next '[Drive]
Pero te va a tardar un guevo
**Se me olvidaba, para ver los archivos ocultos y otros protegidos del sistema basta con ejecutar la aplicación con privilegios de administrador.