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 \ 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 dé la ruta de la carpeta temporal del usuario actual como esta:
C: \ Documents and Settings \ administrador \ Configuración local \ Temp \
c#
.net
temporary-directory
Anoop
fuente
fuente
Respuestas:
System.IO.Path.GetTempPath()
es solo un contenedor para una llamada nativa aGetTempPath(..)
en Kernel32.Mira esto http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx
Copiado de esa página:
No me queda del todo claro si "El directorio de Windows" significa el directorio temporal en Windows o el directorio de Windows en sí. Volcar archivos temporales en el directorio de Windows en sí parece un caso no deseado, pero quién sabe.
Entonces, combinando 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 de lo contrario no están configuradas y está tomando una alternativa a la ruta temporal de Windows.
fuente
TEMP
variable de entorno se establecería en dos lugares: para el propio usuario y para la máquina local. Si no está configurado para el usuario, entonces se usaría el de la máquina local, y eso siempre se configura en una instalación predeterminada. Por lo tanto, la búsqueda generalmente se detiene en el segundo paso. En la prueba, siTMP
,TEMP
yUSERPROFILE
son todos desarmado, lo que realmente hace volver a la caída%SystemRoot%
(C:\Windows\
).NO use esto:
Las variables de entorno pueden anularse, por lo que la
TEMP
variable no es necesariamente el directorio.La forma correcta es usar
System.IO.Path.GetTempPath()
como en la respuesta aceptada.fuente
System.IO.Path.GetTempPath()
.GetEnvironmentVariable("TEMP")
yGetTempPath()
.GetTempPath()
comprueba primero la variable "TMP", luego "TEMP" y finalmente "USERPROFILE". Si no encuentra ninguno de ellos, devuelve la ruta a la carpeta de Windows. También garantiza que devuelve la ruta correcta, pero no garantiza que la ruta exista.GetTempPath
De todos modos, depende de las variables de entorno, si lee la documentación del núcleo, por lo que el usuario Logman señala que no hay razón para no usarGetEnvironmentVariable
... ambos tienen la misma debilidad.Tengo este mismo requisito: queremos colocar registros en un directorio raíz específico que debería existir dentro del entorno.
Si quiero combinar esto con un subdirectorio, debería poder usar
Path.Combine( ... )
.El
GetFolderPath
método tiene una sobrecarga para las opciones especiales de carpeta que le permite controlar si la ruta especificada se crea o simplemente se verifica.fuente
tratar
fuente