Blink: CleanseStructureTask

La primera implementación de BlinkTask es la clase CleanseStructureTask, la cual eliminará todos los directorios que se encuentren vacios en una ruta determinada.

Al heredar de la clase abstracta BlinkTask, se deberán sobrescribir los métodos DoTask y LoadConfiguration; el método ValidateDomain no será sobrescrito ya que este posee el código necesario para poder validar que el nombre del directorio sea válido y que exista.

public class CleanseStructureTask : BlinkTask
{
    protected override void DoTask()
    {

    }

    protected override void LoadConfiguration()
    {

    }
}

En la clase agregué un método privado recursivo llamado CleanseFolder, este método recibe de parámetro una ruta. Cada directorio dentro de la ruta es explorado para validar si este no posee archivos. De no poseer archivos, el directorio es eliminado.

Adicionalmente se muestran mensajes amigables para comprender el origen del error (excepción) sin mostrar un detalle muy técnico.

private void CleanseFolder(string startLocation)
{
    string folder = String.Empty;

    try
    {
        foreach (string currentDirectory in Directory.GetDirectories(startLocation))
        {
            folder = currentDirectory;

            CleanseFolder(currentDirectory);

            if (!Directory.EnumerateFileSystemEntries(currentDirectory).Any())
                Directory.Delete(currentDirectory, false);
        }
    }
    catch (UnauthorizedAccessException)
    {
        throw new BlinkException(
            String.Format("El Directorio \"{0}\" no se encuentra accesible.", folder));
    }
    catch (PathTooLongException)
    {
        throw new BlinkException(
            String.Format("La ruta al Directorio \"{0}\" es muy larga.", folder));
    }
    catch (DirectoryNotFoundException)
    {
        throw new BlinkException(
            String.Format("No se encontró el Directorio \"{0}\".", folder));
    }
    catch (BlinkException ex)
    {
        throw ex;
    }
    catch (Exception ex)
    {
        throw new BlinkException(
            String.Format("Un error crítico ha ocurrido: {0}", ex.Message), ex);
    }
}

El código de la clase será el siguiente:

using System;
using System.Linq;
using System.IO;

namespace BlinkLib
{
    public class CleanseStructureTask : BlinkTask
    {
        protected override void DoTask()
        {
            CleanseFolder(this.WorkingDirectory);
        }

        protected override void LoadConfiguration()
        {
            // Esta clase no posee configuraciones 🙂
        }

        private void CleanseFolder(string startLocation)
        {
            string folder = String.Empty;

            try
            {
                foreach (string currentDirectory in Directory.GetDirectories(startLocation))
                {
                    folder = currentDirectory;

                    CleanseFolder(currentDirectory);

                    if (!Directory.EnumerateFileSystemEntries(currentDirectory).Any())
                        Directory.Delete(currentDirectory, false);
                }
            }
            catch (UnauthorizedAccessException)
            {
                throw new BlinkException(
                    String.Format("El Directorio \"{0}\" no se encuentra accesible.", folder));
            }
            catch (PathTooLongException)
            {
                throw new BlinkException(
                    String.Format("La ruta al Directorio \"{0}\" es muy larga.", folder));
            }
            catch (DirectoryNotFoundException)
            {
                throw new BlinkException(
                    String.Format("No se encontró el Directorio \"{0}\".", folder));
            }
            catch (BlinkException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new BlinkException(
                    String.Format("Un error crítico ha ocurrido: {0}", ex.Message), ex);
            }
        }
    }
}

 


Icono Lightbulb por Recep Kütük

One thought on “Blink: CleanseStructureTask”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s