Sobre archivos temporales, excepciones y SVN

Hace un rato me encontré con un problema al tratar de eliminar directorios recursivamente.
Trataba de crear una funcion para borrar los archivos temporales de una aplicación en C#, sin embargo, me generaba una excepción como esta:

System.UnauthorizedAccessException was caught
  Message="Acceso denegado a la ruta de acceso 'all-wcprops'."
  Source="mscorlib"
  StackTrace:
       en System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
       en System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
       en System.IO.Directory.Delete(String path, Boolean recursive)

El error se origina al tratar de eliminar el archivo ‘all-wcprops’. Sin embargo, la aplicación no genera ese archivo. Al buscar qué podría ser, me encontré con muchos resultados que hacían referencia a SVN, Tortoise y temas similares.

El problema fue que intentaba eliminar una carpeta que ‘no debería’. Se trata de .svn la cual se encontraba junto con los archivos temporales.

La solución es evitar eliminarla con una condición y seguir con los demás directorios y archivos. Esta es la función completa

        public void deleteTmp() 
        {
            MainForm.append("Iniciando eliminacion de archivos temporales");

            string filePath = "";
            try
            {

                //Eliminacion de archivos temporales....
                string[] files = Directory.GetFiles(this.system_tmp_dir, "*.*");
                
                foreach (string file in files)
                {
                    filePath = file;
                    File.Delete(file);
                }



                //Eliminacion de directorios temporales...
                string[] dirs = Directory.GetDirectories(this.system_tmp_dir, "*");

                foreach (string directory in dirs) 
                {
                    filePath = directory;

                    //Evita remover el registro svn y mandar una excepcion
                    if(!filePath.Contains(".svn"))
                        Directory.Delete(directory,true);
                }

            }
            catch (Exception e)
            {
                MainForm.append("Error al eliminar el archivo " + filePath  + ": " + e.Message);
            }
        
        }
	

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 )

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 )

Google+ photo

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

Conectando a %s