Verificar accesos y permisos a una carpeta en una aplicación .net

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.

  1. 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.

  1. 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:

  1. 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.