Cómo obtener una carpeta temporal para el usuario actual
Actualmente estoy usando la siguiente función para obtener la ruta de la carpeta temporal para el usuario actual:
string tempPath = System.IO.Path.GetTempPath();
En algunas máquinas me da la ruta de la carpeta temporal del usuario actual como:
C:\Documentos y configuraciones\administrador\Configuración local\Temp\
En algunas máquinas me da la ruta de la carpeta temporal del sistema como:
C:\Windows\TEMP
La documentación de MSDN también dice que la API anterior devuelve la carpeta temporal del sistema actual.
¿Hay alguna otra API disponible que me proporcione la ruta de la carpeta temporal del usuario actual como esta?
C:\Documentos y configuraciones\administrador\Configuración local\Temp\
System.IO.Path.GetTempPath()
es solo un contenedor para una llamada nativa GetTempPath(..)
en Kernel32.
Eche un vistazo a http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx
Copiado de esa página:
La función GetTempPath comprueba la existencia de variables de entorno en el siguiente orden y utiliza la primera ruta encontrada:
- La ruta especificada por la variable de entorno TMP.
- La ruta especificada por la variable de entorno TEMP.
- La ruta especificada por la variable de entorno USERPROFILE.
- El directorio de Windows.
No me queda del todo claro si "El directorio de Windows" significa el directorio temporal de Windows o el directorio de Windows en sí. Volcar archivos temporales en el directorio de Windows parece un caso indeseable, pero quién sabe.
Entonces, al combinar esa página con su publicación, supongo que una de las variables TMP, TEMP o USERPROFILE para su usuario Administrador apunta a la ruta de Windows, o bien no están configuradas y está recurriendo a la ruta temporal de Windows.
NO uses esto:
System.Environment.GetEnvironmentVariable("TEMP")
Las variables de entorno se pueden anular, por lo que la TEMP
variable no es necesariamente el directorio.
La forma correcta es utilizar System.IO.Path.GetTempPath()
como en la respuesta aceptada.