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.