Actuellement, j'utilise la fonction suivante pour obtenir le chemin du dossier temporaire pour l'utilisateur actuel:
string tempPath = System.IO.Path.GetTempPath();
Sur certaines machines, il me donne le chemin du dossier temporaire de l'utilisateur actuel comme:
C: \ Documents and Settings \ administrateur \ Local Settings \ Temp \
Sur certaines machines, il me donne le chemin du dossier temporaire du système comme:
C: \ Windows \ TEMP
La documentation MSDN indique également que l'API ci-dessus renvoie le dossier temporaire du système actuel.
Existe-t-il une autre API qui me donne le chemin du dossier temporaire de l'utilisateur actuel comme ceci:
C: \ Documents and Settings \ administrateur \ Local Settings \ Temp \
c#
.net
temporary-directory
Anoop
la source
la source
Réponses:
System.IO.Path.GetTempPath()
est juste un wrapper pour un appel natif àGetTempPath(..)
Kernel32.Jetez un œil à http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx
Copié de cette page:
Il n'est pas tout à fait clair pour moi si "le répertoire Windows" signifie le répertoire temporaire sous Windows ou le répertoire Windows lui-même. Le vidage des fichiers temporaires dans le répertoire Windows lui-même ressemble à un cas indésirable, mais qui sait.
Donc, en combinant cette page avec votre message, je suppose que l'une des variables TMP, TEMP ou USERPROFILE pour votre utilisateur Administrateur pointe vers le chemin Windows, sinon elles ne sont pas définies et cela prend un repli sur le chemin Temp Windows.
la source
TEMP
variable d'environnement serait définie à deux endroits: pour l'utilisateur lui-même et pour la machine locale. S'il n'est pas défini pour l'utilisateur, celui de la machine locale sera utilisé, et il est toujours défini dans une installation par défaut. Par conséquent, la recherche s'arrête généralement à la deuxième étape. Lors du test, siTMP
,TEMP
etUSERPROFILE
sont tous hors service, il fait fait retour à l'automne à%SystemRoot%
(C:\Windows\
).NE PAS utiliser ceci:
Les variables d'environnement peuvent être remplacées, donc la
TEMP
variable n'est pas nécessairement le répertoire.La bonne façon est d'utiliser
System.IO.Path.GetTempPath()
comme dans la réponse acceptée.la source
System.IO.Path.GetTempPath()
.GetEnvironmentVariable("TEMP")
etGetTempPath()
.GetTempPath()
vérifie d'abord la variable "TMP" puis "TEMP" et enfin "USERPROFILE". Si ne trouve aucun de ceux-ci, son chemin de retour vers le dossier Windows. Il garantit également qu'il renvoie un chemin correct, mais il ne garantit pas que le chemin existe.GetTempPath
s'appuie de toute façon sur vos variables d'environnement, si vous lisez la documentation du noyau, de sorte que l'utilisateur Logman souligne qu'il n'y a aucune raison de ne pas les utiliserGetEnvironmentVariable
... ils ont tous les deux la même faiblesse.J'ai cette même exigence - nous voulons mettre les journaux dans un répertoire racine spécifique qui devrait exister dans l'environnement.
Si je veux combiner cela avec un sous-répertoire, je devrais pouvoir l'utiliser
Path.Combine( ... )
.La
GetFolderPath
méthode a une surcharge pour les options de dossier spéciales qui vous permet de contrôler si le chemin spécifié doit être créé ou simplement vérifié.la source
essayer
la source