Como escribir archivos temporales en el Framework .NET
Hace poco estuve optimizando una aplicación web que desarrollé usando .NET 1.1. have muchos años. Y por optimizar me refiero a actualizarla a .NET 3.5 y mejorar la calidad del código, ya que esa aplicación fue desarrollada cuando todavía estaba en la escuela.
Parte de la optimización fue mejorar la funcionalidad de manejar archivos temporales. La aplicación generaba reportes en PDF, y para poder integrar unas gráficas al archivo PDF, primero tenía que guardarlas a disco.
No sé si en esa versión del .NET Framework no existían las nuevas funciones ahora utilizo, o si simplemente no eran tan conocidas, pero en aquel momento tuve que escribir mis propias funciones para obtener un nombre único de archivo (usando Date.Now.Ticks, mezclado con otras variables) y tambien tuve que crear un directorio temporal dentro de la aplicación, para poder escribir los archivos ahi y después borrarlos.
.NET tiene ahora 2 funciones muy buenas para facilitar el trabajo del programador:
1. System.IO.Path.GetTempFileName() – Regresa un string con el path completo de un nombre único para un archivo temporal. Por ejemplo: C:\Documents and Settings\Gabriel\Local Settings\Temp\tmp16A.tmp. Como pueden ver, ni siquiera tuve que molestarme en conseguir el path del folder temporal del sistema. Esta función me regresa todo ya concatenado.
2. System.IO.Path.GetTempPath() – obtiene el nombre del folder (o carpeta, o directorio, como le quieran llamar) temporal del sistema, donde no es necesario tener permisos especiales para poder escribir archivos. Lo cual es una ventaja porque no hay que asegurarse o preocuparse de que el usuario ASPNET tenga privilegios, como antes.
Otra ventaja es que si escribimos nuestros archivos temporales a la carpeta de Archivos temporales del sistema, Windows borrará automaticamente los archivos la próxima vez que el sistema se reinicie. Claro, esto puede servir para Thin Applications (aplicaciones que corren del lado del cliente), pero no debemos confiarnos de esto si estamos ejecutando este código en el servidor, ya que en teoría nunca se reinician, o toman muchísimo más tiempo y podríamos saturar el disco.
Espero les sirva.