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");