Índice
0. Introducción1. 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/8: C:\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:
- csc /target:exe CreacionArchivoTemporal.cs
Ejecución assembly:
- .\CreacionArchivoTemporal.exe
> Prueba de ejecución:
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:
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.