En este post quiero explicarles cómo pueden hacer para comprobar permisos en un directorio, esto aplica para aplicaciones Web, de escritorio y demás.. lo pueden lazar desde una dll o librería de clases.
- Comprobar si un directorio existe:
if (System.IO.Directory.Exists(strRuta_Informacion))
Lo primero entonces es comprobar que el directorio existe para eso usamos el anterior código que nos devolverá un true o false. No solo comprobamos si existe sino si se tiene acceso al compartirlo cuando el directorio está en red.
- Comprobar accesos y autorización:
try { AuthorizationRuleCollection collection = Directory.GetAccessControl(strRuta_Informacion).GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)); foreach (FileSystemAccessRule rule in collection) { if (rule.AccessControlType == AccessControlType.Allow) { break; } } } catch (UnauthorizedAccessException ex) { } catch (Exception ex) { }
Con este código podemos saber si estamos autorizados para ver y leer la carpeta debemos capturar una excepción y luego también de finalizar el foreach si no encontramos permisos es porque no tenemos ninguna acceso a dicha carpeta.
Este código no nos sirve o no es muy fiable para comprobar los permisos de escritura para eso recomiendo usar el siguiente:
- Comprobar permisos de escritura sobre una carpeta:
try { using (FileStream fs = File.Create(Path.Combine(strRuta_Informacion, "AccessTemp.txt"), 1, FileOptions.DeleteOnClose)) { fs.Close(); } } catch (Exception ex) { }
Este código es el que recomiendo para tal fin, lo que hace es crear un archivo temporal dentro de la ruta, este archivo lo cerramos inmediatamente de creado y se borra. esto nos asegura por completo que tenemos permiso de escritura sobre esa carpeta.
Si tienen alguna duda o una mejor forma de detectar estos permisos y accesos me cuentan Gracias.