web-dev-qa-db-fra.com

Comment obtenir un dossier temporaire pour l'utilisateur actuel

Actuellement, j'utilise la fonction suivante pour obtenir le chemin du dossier temporaire de 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\Paramètres locaux\Temp \

Sur certaines machines, il me donne le chemin du dossier système temporaire 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 disponible qui me donne le chemin du dossier temporaire de l'utilisateur actuel, comme ceci:

C:\Documents and Settings\administrateur\Paramètres locaux\Temp \

375
Anoop

System.IO.Path.GetTempPath() n'est qu'un wrapper pour un appel natif à GetTempPath(..) dans Kernel32.

Regardez http://msdn.Microsoft.com/en-us/library/aa364992 (VS.85) .aspx

Copié de cette page:

La fonction GetTempPath vérifie l'existence de variables d'environnement dans l'ordre suivant et utilise le premier chemin trouvé:

  • Le chemin spécifié par la variable d'environnement TMP.
  • Le chemin spécifié par la variable d'environnement TEMP.
  • Le chemin spécifié par la variable d'environnement USERPROFILE.
  • Le répertoire Windows.

Je ne sais pas très bien si "Le répertoire Windows" désigne le répertoire temporaire sous Windows ou le répertoire Windows lui-même. Dumping 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 de votre utilisateur administrateur pointe sur le chemin de la fenêtre, ou bien elles ne sont pas définies et le repli sur le chemin de la fenêtre est effectué.

393

NE PAS utiliser ceci:

System.Environment.GetEnvironmentVariable("TEMP")

Les variables d'environnement pouvant être remplacées, la variable TEMP n'est pas nécessairement le répertoire.

La méthode correcte consiste à utiliser System.IO.Path.GetTempPath() comme dans la réponse acceptée.

27
Helen

J'ai les mêmes exigences - nous voulons placer les journaux dans un répertoire racine spécifique qui devrait exister dans l'environnement.

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

Si je veux combiner cela avec un sous-répertoire, je devrais pouvoir utiliser Path.Combine( ... ).

La méthode GetFolderPath 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é.

21
IAbstract