sábado, 18 de julio de 2015

Receta C# No. 5-15: Cómo Crear un Archivo Temporal

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código C#
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

En algunas aplicaciones quizás requiramos almacenar datos de usuario o de aplicación en archivos temporales. Aprovecharemos esta receta C# para describir el proceso requerido. También estudiáremos la ventaja de usar la clase Path y uno de sus miembros static para facilitar y agilizar esta tarea.

1. Problema

Requerimos crear un archivo temporal en la carpeta de temporales de la cuenta de usuario de Windows. Además, este archivo temporal debe tener un nombre único con el propósito de evitar conflicto con otros archivos temporales creados por el usuario o una aplicación.

2. Solución

La clase Path ofrece al programador el método static GetTempFileName para crear un archivo temporal en el directorio de temporales de la cuenta del usuario.

3. Discusión de la Solución

A pesar de que en un proyecto C# podemos usar enfoques alternativos para la generación de archivos temporales como:
  • Uso de un GUID [2], o 
  • Marca de fecha y hora junto con un número pseudoaleatorio.
Sin embargo, en C# contamos con una alternativa efectiva, además de sencilla, para la creación de archivos temporales y es a través del uso del método static GetTempFileName de la clase Path.

El método GetTempFileName [3] crea un archivo con nombre único, vacío (cero bytes) y retorna la ruta donde ha sido creado. Su ruta será la del directorio de temporales para la cuenta de usuario actual:
  • Windows XP: C:\Documents  and Settings\[Usuario]\Local Settings\temp
  • Windows 7/8C:\Users\John\AppData\Local\Temp\
Los nombres de los archivos tendrá como extensión .tmp.


Algunas excepciones asociadas con el uso de este método:
  • IOException [4]:
    • Esta excepción se generá si se intenta crear más de 65535 archivos sin eliminar archivos temporales previos.
    • Esta excepción se generá si no es posible crear un nombre de archivo único. Se recomienda borrar archivos previos para evitar esta excepción.

4. Práctica: Código C#

Escribamos una aplicación consola para probar el método Path.GetTempFileName y crear un archivo temporal en Windows 8.1.

Archivo C# CreacionArchivoTemporal.cs [Enlace alternativo][Enlace alternativo]:

En la línea 15 creamos un archivo temporal con el método Path.GetTempFileName y almacenamos la ruta devuelta en la variable archivoTemp. Mostramos la ruta junto con el nombre del archivo en línea 17.


Con la sentencia using creamos un objeto FileStream para escribir en el archivo temporal recién creado (simulamos la escritura). Con File.Delete borramos el archivo temporal.

Compilación:


  1. csc /target:exe CreacionArchivoTemporal.cs

Ejecución assembly:


  1. .\CreacionArchivoTemporal.exe

> Prueba de ejecución:
Ejecución assembly CreacionArchivoTemporal.exe
Figura 1. Ejecución assembly CreacionArchivoTemporal.exe.


Antes de presionar Enter para borrar el archivo vamos al directorio C:\Users\[Usuario]\AppData\Local\Temp\ y buscamos por el archivo tmp16B6.tmp:
Archivo temporal tmp16B6.tmp
Figura 2. Archivo temporal tmp16B6.tmp.

5. Conclusiones

Estudiamos el método GetTempFileName para la creación de un archivo temporal en el directorio de temporales de la cuenta del usuario. Notamos que es un proceso simple y directo y que puede ahorrarnos una cantidad de tiempo en su manipulación frente a otros enfoques más manuales.


En la próxima receta C# aprenderemos a obtener el espacio total libre de una unidad de disco.

6. Glosario

  • Archivo
  • Archivo temporal
  • Directorio
  • GUID
  • Ruta

7. Literatura & Enlaces

[1]: Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: Globally unique identifier - Wikipedia, the free encyclopedia - https://en.wikipedia.org/wiki/Globally_unique_identifier
[3]: Path.GetTempFileName Method (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename(v=vs.110).aspx
[4]: IOException Class (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.ioexception(v=vs.110).aspx


M

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.