2010-04-29 18 views
6

J'essaie d'utiliser la variable d'environnement TMP dans un programme. Quand je demandecomparer deux chemins de Windows, un tilde contenant, en python

tmp = os.path.expandvars("$TMP") 

Je reçois

C:\Users\STEVE~1.COO\AppData\Local\Temp 

qui contient l'ancienne école, sous forme tilde. Une fonction sur laquelle je n'ai aucun contrôle renvoie des chemins comme

C:\Users\steve.cooper\AppData\Local\Temp\file.txt 

Mon problème est le suivant: Je voudrais vérifier si le fichier est dans mon disque de temp, mais je ne peux pas trouver un moyen de les comparer. Comment dites-vous si ces deux répertoires Windows;

C:\Users\STEVE~1.COO\AppData\Local\Temp 
C:\Users\steve.cooper\AppData\Local\Temp 

sont les mêmes?

Répondre

4

Vous aurez besoin des extensions win32 python de http://sourceforge.net/projects/pywin32/ ou j'utiliser python emballé par ActiveState

Ils comprennent la fonction win32file.GetLongPathName qui transformera la version 8.3 dans le chemin d'accès complet.

8

Voici une autre solution utilisant uniquement ctypes de la bibliothèque standard Python.

tmp = unicode(os.path.expandvars("$TMP")) 

import ctypes 
GetLongPathName = ctypes.windll.kernel32.GetLongPathNameW 
buffer = ctypes.create_unicode_buffer(GetLongPathName(tmp, 0, 0)) 
GetLongPathName(tmp, buffer, len(buffer)) 
print buffer.value