Como obter pasta temporária para o usuário atual

Atualmente estou usando a seguinte function para obter o caminho da pasta temporária para o usuário atual:

string tempPath = System.IO.Path.GetTempPath(); 

Em algumas máquinas, ele me fornece o caminho da pasta temp do usuário atual, como:

C: \ Documents and Settings \ administrador \ Configurações locais \ Temp \

Em algumas máquinas, ele me dá o caminho da pasta temp do sistema como:

C: \ Windows \ TEMP

A documentação do MSDN também diz que a API acima retorna a pasta temporária do sistema atual.

Existe alguma outra API disponível que me dê o caminho da pasta temporária do usuário atual assim:

C: \ Documents and Settings \ administrador \ Configurações locais \ Temp \

System.IO.Path.GetTempPath() é apenas um invólucro para uma chamada nativa para GetTempPath(..) no Kernel32.

Dê uma olhada em http://msdn.microsoft.com/pt-br/library/aa364992(VS.85).aspx

Copiado dessa página:

A function GetTempPath verifica a existência de variables ​​de ambiente na seguinte ordem e usa o primeiro caminho encontrado:

  • O caminho especificado pela variável de ambiente TMP.
  • O caminho especificado pela variável de ambiente TEMP.
  • O caminho especificado pela variável de ambiente USERPROFILE.
  • O diretório do Windows.

Não está totalmente claro para mim se “O diretório do Windows” significa o diretório temp no windows ou no próprio diretório windows. Dumping arquivos temporários no próprio diretório do Windows soa como um caso indesejável, mas quem sabe.

Então, combinando essa página com a sua postagem, eu diria que uma das variables ​​TMP, TEMP ou USERPROFILE para o seu usuário Administrator aponta para o caminho do windows, ou então elas não estão definidas e estão tomando um fallback para o caminho temp do windows.

NÃO use isto:

 System.Environment.GetEnvironmentVariable("TEMP") 

As variables ​​de ambiente podem ser substituídas, portanto, a variável TEMP não é necessariamente o diretório.

A maneira correta é usar System.IO.Path.GetTempPath() como na resposta aceita.

Eu tenho esse mesmo requisito – queremos colocar logs em um diretório raiz específico que deve existir dentro do ambiente.

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

Se eu quiser combinar isso com um subdiretório, eu deveria poder usar Path.Combine( ... ) .

O GetFolderPath método tem uma sobrecarga para opções de pasta especial que permite que você controle se o caminho especificado ser criado ou simplesmente verificado.

experimentar

 Environment.GetEnvironmentVariable("temp");