Atualmente, estou usando a seguinte função 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 temporária do usuário atual, como:
C: \ Documents and Settings \ administrador \ Configurações locais \ Temp \
Em algumas máquinas, ele fornece 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 como este:
C: \ Documents and Settings \ administrador \ Configurações locais \ Temp \
c#
.net
temporary-directory
Anoop
fonte
fonte
Respostas:
System.IO.Path.GetTempPath()
é apenas um invólucro para uma chamada nativaGetTempPath(..)
no Kernel32.Dê uma olhada em http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx
Copiado dessa página:
Não está totalmente claro para mim se "O diretório do Windows" significa o diretório temporário no Windows ou o próprio diretório do Windows. Despejar arquivos temporários no próprio diretório do Windows parece um caso indesejável, mas quem sabe.
Então, combinando essa página com a sua postagem, eu acho que uma das variáveis TMP, TEMP ou USERPROFILE para o usuário Administrador aponta para o caminho do Windows, ou elas não estão definidas e estão dando um retorno ao caminho temporário do Windows.
fonte
TEMP
variável de ambiente seria configurada em dois locais: para o próprio usuário e para a máquina local. Se não estiver definido para o usuário, será utilizado o da máquina local e sempre configurado em uma instalação padrão. Portanto, a pesquisa geralmente pára na segunda etapa. Nos testes, seTMP
,TEMP
eUSERPROFILE
são todos definida, ele realmente faz para trás queda de%SystemRoot%
(C:\Windows\
).NÃO use isso:
As variáveis de ambiente podem ser substituídas, portanto, a
TEMP
variável não é necessariamente o diretório.A maneira correta é usar
System.IO.Path.GetTempPath()
como na resposta aceita.fonte
System.IO.Path.GetTempPath()
.GetEnvironmentVariable("TEMP")
eGetTempPath()
.GetTempPath()
verifica primeiro a variável "TMP", depois "TEMP" e, finalmente, "USERPROFILE". Se não encontrar nenhum desses, retorne o caminho para a pasta do Windows. Também garante que ele retorne o caminho correto, mas não garante que o caminho exista.GetTempPath
depende de suas variáveis de ambiente de qualquer maneira, se você ler a documentação do kernel, assim como o usuário Logman aponta que não há razão para não usarGetEnvironmentVariable
... ambos têm a mesma fraqueza.Eu tenho esse mesmo requisito - queremos colocar os logs em um diretório raiz específico que deve existir no ambiente.
Se eu quiser combinar isso com um subdiretório, devo poder usá-lo
Path.Combine( ... )
.O
GetFolderPath
método possui uma sobrecarga para opções especiais de pasta, que permitem controlar se o caminho especificado será criado ou simplesmente verificado.fonte
tentar
fonte