Usuario
FileIO.SearchOption.SearchAllSubdirectories + System.UnauthorizedAccessException

Pregunta
-
Saludos:
Tengo esta pequeña funcion que sirve para extraer los nombres de los archivos que estan (o no estan) en un directorio comparados con otro (LinQ):
Public Function FilesNotDirB(ByVal DirSource As String, ByVal DirTarget As String) As List(Of String) Dim MissingFiles As IEnumerable(Of String) Try If My.Computer.FileSystem.DirectoryExists(DirSource) = False Or My.Computer.FileSystem.DirectoryExists(DirTarget) = False Then Return Nothing Dim FilesFoundInDirectoryA_WithDirectoryAddressRemoved As IEnumerable(Of String) = From f As String In FileIO.FileSystem.GetFiles(DirSource, FileIO.SearchOption.SearchAllSubDirectories, "*.*") Select f.Replace(DirSource, "") Dim FilesFoundInDirectoryB_WithDirectoryAddressRemoved As IEnumerable(Of String) = From f As String In FileIO.FileSystem.GetFiles(DirTarget, FileIO.SearchOption.SearchAllSubDirectories, "*.*") Select f.Replace(DirTarget, "") ' Produce a List of files found in SOURCE but not found in TARGET 'Dim MissingFiles As IEnumerable(Of String) = FilesFoundInDirectoryA_WithDirectoryAddressRemoved.Except(FilesFoundInDirectoryB_WithDirectoryAddressRemoved) MissingFiles = FilesFoundInDirectoryA_WithDirectoryAddressRemoved.Except(FilesFoundInDirectoryB_WithDirectoryAddressRemoved) Catch ex As Exception MsgBox(ex.Message) MissingFiles = Nothing End Try Return MissingFiles.ToList End Function
Pero tengo el problema que cuando se usa el directorio raiz, me genera la excepcion "System.UnauthorizedAccessException". No he podido hacer que me excluya estos directorios.
Alguna idea?
Gracias.
JOSE LUIS
Dios NO los llamo LAS DIEZ RECOMENDACIONES
- Cambiado Enrique M. Montejo miércoles, 4 de febrero de 2015 7:31 Pregunta relacionada con LINQ.
Todas las respuestas
-
Seguramente te dé esa excepción al buscar en la carpeta de Program Files, la de REcycle Bin o System Volume Information. Puedes mostrar el texto completo del mensaje de Error? Inclusive el StackTrace y el InnerExcption
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
- Editado Sergio Parra miércoles, 28 de enero de 2015 9:01
-
Saludos:
Este es el error que arroja:
System.UnauthorizedAccessException was caught Message="Access to the path 'G:\$RECYCLE.BIN\S-1-5-21-1106121609-1721793262-2141243249-1001' is denied." Source="mscorlib" StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption) at System.IO.Directory.GetFiles(String path, String searchPattern, SearchOption searchOption) at Microsoft.VisualBasic.FileIO.FileSystem.FindPaths(FileOrDirectory FileOrDirectory, String directory, String wildCard) at Microsoft.VisualBasic.FileIO.FileSystem.FindFilesOrDirectories(FileOrDirectory FileOrDirectory, String directory, SearchOption searchType, String[] wildcards, Collection`1 Results) at Microsoft.VisualBasic.FileIO.FileSystem.FindFilesOrDirectories(FileOrDirectory FileOrDirectory, String directory, SearchOption searchType, String[] wildcards, Collection`1 Results) at Microsoft.VisualBasic.FileIO.FileSystem.FindFilesOrDirectories(FileOrDirectory FileOrDirectory, String directory, SearchOption searchType, String[] wildcards, Collection`1 Results) at Microsoft.VisualBasic.FileIO.FileSystem.GetFiles(String directory, SearchOption searchType, String[] wildcards) at WinSearh.Md_Functions.FilesNotDirB(String DirSource, String DirTarget) in C:\Controller\VS2008_Projects\WinSearh\WinSearh\Md_Functions.vb:line 11 InnerException:
Gracias por tu interes.
JOSE LUIS
Dios NO los llamo LAS DIEZ RECOMENDACIONES
-
Esa carpeta es de sistema y como tal no deberías acceder a ella así como así.
Una pregunta... el usuario que ejecuta ese código es Administrador de tu equipo?
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
-
-
Saludos:
Si, el usuario es el administrador. No me gustaria entrar a configurar permisos.
Lo que busco es una forma de hacer que el codigo evite mirar esos directorios.
Algo usando "FileIO.SearchOption.SearchAllSubdirectories" que solo busque los directorios que son visibles o accesibles, para evitar la excepcion.
Gracias.
JOSE LUIS
Dios NO los llamo LAS DIEZ RECOMENDACIONES
-
Pues a mi modo de ver tendrás que implementarte un método que de cada directorio vaya viendo sus atributos,
info.Attributes And FileAttributes.System <> FileAttributes.System
es decir, que no sea un directorio o archivo de sistema. y si no es así, recorrerlo recursivamente
saludos.
.
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
-