Borrar los archivos temporales en VB

Ejercicio que obtiene las variables de entorno TEMP y APPDATA, lee y escribe en un archivo de texto para llevar la cuenta de archivos borrados e inicia un nuevo hilo o hebra (thread) para reiniciar el formulario, en Visual Studio 2017 con VB

En este ejercicio se propone una aplicación que borra los archivos temporales de Windows y la carpeta que los contiene, leyendo la variable de entorno TEMP definida para el usuario de la sesión actual. Además, se muestra al usuario información sobre:

  1. número de archivos encontrados en la ejecución actual dentro de la carpeta que corresponda a la variable de entorno %TEMP%
  2. número de archivos borrados en la ejecución actual (sólo se borran los archivos que no estén en uso)
  3. número total acumulado de archivos borrados por el programa desde su primera ejecución leyendo este dato desde un archivo de texto colocado en la carpeta que corresponda a la variable de entorno %APPDATA%.

Durante varios años he utilizado el script de VB llamado DeleteTempFiles.vbs , creado en 1999 por Michael Harris y modificado posteriormente por Bill James y Marcial Carlés. Este script funciona borrando los archivos temporales de Windows e informando al usuario del tamaño de los archivos borrados (dato que guarda en un archivo de texto en el directorio de Windows).
He transformado el script en una aplicación de formulario de Windows con Visual Basic .NET. Esta aplicación está inspirada en DeleteTempFiles.vbs en cuanto a su función principal y también en cuanto al mantenimiento de información en un archivo de texto. En lugar de guardar el tamaño, se guarda el número acumulado de los archivos borrados. A continuación se comentan los detalles más interesantes del código.

Hay que importar espacios de nombres necesarios para poder realizar las tareas deseadas: manejo de archivos y carpetas, variables de entorno, tratar cadenas de texto y programación multiproceso:

borrartemp1

Se declaran variables en el ámbito de la clase para poder ser usadas en cualquiera de los métodos de la clase:

borrartemp2

Al cargar el formulario se configura la propiedad Form.CancelButton (obtiene o establece el control de botón que se activará cuando el usuario presione la tecla ESC) en el único botón de la ventana «OK (Esc)»:

borrartemp3

La primera vez que se ejecuta el programa, al comprobar que no existe el archivo de texto C:\Usuarios\usuario\AppData\Roaming\Borrar_TEMP.txt lo crea, informa al usuario de que el programa ha de reiniciarse para poder leer desde el archivo, la ventana se cierra y vuelve a arrancar de forma automática; esto se consigue creando un hilo (thread) y enlazándolo con el método nuevoForm() que arranca de nuevo la aplicación después de que ésta se haya cerrado en su hilo actual:

borrartemp4

El método listadoPre() cuenta los archivos y carpetas del directorio TEMP antes del borrado. Para ello utiliza clases que permiten enumerar archivos en directorios y subdirectorios y otras operaciones típicas como copiar, mover, cambiar de nombre, crear y eliminar: FileStream, DirectoryInfo y FileSystemInfo.
También lee desde el archivo de texto el número acumulado de archivos borrados en las ejecuciones anteriores del programa usando la clase Stream.Reader que permite leer archivos de texto secuenciales.
Finalmente, elimina el directorio TEMP usando el método DirectoryInfo.Delete que elimina una instancia de DirectoryInfo especificando si se van a eliminar los subdirectorios y los archivos (True o False):

borrartemp5

El método listadoPost() cuenta los archivos y carpetas del directorio TEMP después del borrado, estos archivos son los que no han podido ser borrados por estar en uso. Para ello utiliza clases que permiten enumerar archivos en directorios y subdirectorios y otras operaciones típicas como copiar, mover, cambiar de nombre, crear y eliminar directorios: DirectoryInfo y FileSystemInfo.
También suma el número de archivos borrados hasta la fecha y el número de archivos borrados en la ejecución actual, y escribe este dato en el archivo de texto usando la clase Stream.Writer que permite escribir en archivos de texto secuenciales.
Finalmente, crea el directorio temporal en caso de que no exista ya que algunos programas arrancan con errores si no detectan la presencia del directorio definido en TEMP.

borrartemp5a

Existe una ayuda sencilla mediante un MessageBox con saltos de línea al pulsar sobre el botón de información:

borrartemp6

Nos interesan dos tipos de excepción que pueden aparecer cuando al programa no le es posible borrar algún archivo, lo que suele suceder porque el archivo está en uso o porque no se puede acceder a él por algún otro motivo:
System.IO.IOException
System.UnauthorizedAccessException.
Es recomendable no capturar estas 2 excepciones en el método listadoPre() para no interrumpir el flujo del programa y evitar avisos de error:

borrartemp7

Aplicación en Visual Studio 2017: borrar-temp

Nota: el ajuste automático de escala del formulario que muestra la ventana de la aplicación se puede configurar de varias maneras, lo tienes en las propiedades del formulario como AutoScaleMode, la opción con la que obtengo el mejor resultado es con Dpi.