386 votes

Comment obtenir le dossier temporaire de l'utilisateur actuel

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, cela me donne le chemin du dossier temporaire de l'utilisateur actuel, par exemple :

C:\Documents et paramètres \administrator\Local Paramètres \Temp\

Sur certaines machines, cela me donne le chemin du dossier temporaire du système :

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 et paramètres \administrator\Local Paramètres \Temp\

400voto

Niall Connaughton Points 3786

System.IO.Path.GetTempPath() est juste une enveloppe pour un appel natif à GetTempPath(..) dans Kernel32.

Jetez un coup d'œil à 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 de Windows.

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 semble être un cas indésirable, mais qui sait ?

En combinant cette page avec votre message, je suppose que l'une des variables TMP, TEMP ou USERPROFILE de votre utilisateur Administrateur pointe vers le chemin d'accès Windows, ou bien qu'elles ne sont pas définies et que le système se rabat sur le chemin d'accès temporaire de Windows.

31voto

Helen Points 13822

Essayez ça :

System.Environment.GetEnvironmentVariable("TEMP")

21voto

IAbstract Points 9384

J'ai la même exigence - nous voulons placer les journaux dans un répertoire racine spécifique qui doit 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( ... ) .

Le site GetFolderPath possède 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é.

0voto

Dan Ergis Points 111

Essayez

Environment.ExpandEnvironmentVariables("%temp%")

-8voto

Ikke Points 31517

Essayez

Environment.GetEnvironmentVariable("temp");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X