none
FileIO.SearchOption.SearchAllSubdirectories + System.UnauthorizedAccessException RRS feed

  • 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.
    miércoles, 28 de enero de 2015 3:53

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


    miércoles, 28 de enero de 2015 9:00
  • 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

    jueves, 29 de enero de 2015 15:57
  • 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

    jueves, 29 de enero de 2015 16:06
  • Como ves en la imagen... Los usuarios únicamente entran con Permisos especiales


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    jueves, 29 de enero de 2015 16:09
  • 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

    viernes, 30 de enero de 2015 14:39
  • 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

    viernes, 30 de enero de 2015 16:07
  • Saludos:

    No quiero ser rudo, pero eso es lo que estoy preguntando desde el principio. :-)

    Puedes indicarme como hacerlo en LINQ?

    Gracias.

    JOSE LUIS


    Dios NO los llamo LAS DIEZ RECOMENDACIONES

    viernes, 30 de enero de 2015 21:31