Verificar el permiso de acceso al archivo / carpeta

Me sale una UnautorizedAccessException ejecutando este código:

 string[] fileList = Directory.GetFiles(strDir, strExt); 

La excepción ocurre en c:\users\username\appdata ¿Cómo puedo verificar si tengo permiso de acceso (para listar y leer archivos)?

Antes que nada, verificaría manualmente los permisos y vería qué bloquea usted y qué no. Estoy usando algo así para verificar los permisos (para el archivo de copia):

 AuthorizationRuleCollection acl = fileSecurity.GetAccessRules(true, true,typeof(System.Security.Principal.SecurityIdentifier)); bool denyEdit = false; for (int x = 0; x < acl.Count; x++) { FileSystemAccessRule currentRule = (FileSystemAccessRule)acl[x]; AccessControlType accessType = currentRule.AccessControlType; //Copy file cannot be executed for "List Folder/Read Data" and "Read extended attributes" denied permission if (accessType == AccessControlType.Deny && (currentRule.FileSystemRights & FileSystemRights.ListDirectory) == FileSystemRights.ListDirectory) { //we have deny copy - we can't copy the file denyEdit = true; break; } ... more checks } 

Además, hay algunos casos extraños en los que cierto derecho en la carpeta cambia el derecho de los archivos independientemente de sus permisos individuales (veré si puedo encontrar cuál es).

Consulte el artículo sobre el proyecto de código que es lo que necesita, la clase creada para esto: el objective de esta clase es proporcionar una respuesta simple a una pregunta común: “¿Tengo permiso para leer o escribir este archivo?”.

Una forma simple de probar los derechos de acceso individuales para un archivo y usuario dado

Nota: no se puede publicar el código completo aquí porque es demasiado largo.

Primero, llame a Directory.GetFiles para el directorio raíz. Captura UnauthorizedAccessException – si no, tienes acceso completo.

Si se detecta – llame a la función de cada subdirector recursivo, capture la excepción, si se detecta – agregue dicho directorio a la lista.

Escribir una función recursiva con una lista externa para directorios prohibidos