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: \ Documents and Settings \ administrator \ Configuración local \ Temp \

En algunas máquinas, me da la ruta de la carpeta temporal del sistema como:

C: \ Windows \ TEMP

MSDN Documentation también dice que la API anterior devuelve la carpeta temporal del sistema actual.

¿Hay alguna otra API disponible que me dé la ruta de la carpeta temporal del usuario actual como esta:

C: \ Documents and Settings \ administrator \ Configuración local \ Temp \

System.IO.Path.GetTempPath() es solo un contenedor para una llamada nativa a GetTempPath(..) en Kernel32.

Eche un vistazo a http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx

Copiado desde 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 estoy del todo claro si “El directorio de Windows” significa el directorio temporal en Windows o el directorio de Windows. Volcar los archivos temporales en el directorio de Windows parece ser un caso indeseable, pero quién sabe.

Entonces, combinando esa página con su publicación, supongo que cualquiera de las variables TMP, TEMP o USERPROFILE para su usuario Administrador apunta a la ruta de Windows, o de lo contrario no están configuradas y está tomando una alternativa a la ruta temporal de Windows.

NO use esto:

 System.Environment.GetEnvironmentVariable("TEMP") 

Las variables de entorno pueden anularse, por lo que la variable TEMP no es necesariamente el directorio.

La forma correcta es usar System.IO.Path.GetTempPath() como en la respuesta aceptada.

Tengo este mismo requisito: queremos poner registros en un directorio raíz específico que debería existir dentro del entorno.

 public static readonly string DefaultLogFilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 

Si quiero combinar esto con un subdirectorio, debería poder usar Path.Combine( ... ) .

El método GetFolderPath tiene una sobrecarga para las opciones de carpeta especial que le permite controlar si la ruta especificada se crea o simplemente se verifica.

tratar

 Environment.GetEnvironmentVariable("temp");