2010-10-13 13 views
12

In C++ non è troppo difficile ottenere il percorso completo della cartella che la shell chiama "Documenti" in Windows XP e Windows 7 e "Documenti" in Vista; vedi Get path to My DocumentsCome si ottiene il percorso esatto di "Documenti"?

C'è un modo semplice per farlo in Python?

+0

Non so molto di Windows, ma non è 'os.environ [ 'HOMEPATH'] 'di solito definito su sistemi Windows? –

+0

@Joe, sul mio sistema 'os.environ ['HOMEPATH']' restituisce ''\\''. –

+0

@Mark - Ah, le mie scuse ... Sembrava funzionare sul paio di macchine XP a cui ho accesso, e ho vagamente ricordato che era standard ... Immagino di no! –

risposta

12

è possibile utilizzare il modulo ctypes per ottenere la directory "Documenti":

import ctypes 
from ctypes.wintypes import MAX_PATH 

dll = ctypes.windll.shell32 
buf = ctypes.create_unicode_buffer(MAX_PATH + 1) 
if dll.SHGetSpecialFolderPathW(None, buf, 0x0005, False): 
    print(buf.value) 
else: 
    print("Failure!") 

Fonte: http://bugs.python.org/issue1763#msg62242

+0

Darei un +1, ma l'uso della versione ANSI potrebbe essere limitato sulle directory che utilizzano caratteri al di fuori della tabella codici predefinita. –

+1

@Adrian McCarthy, grazie non me ne sono accorto. Ho cambiato la mia risposta per usare invece la versione Unicode. –

+1

Suppongo che la costante magica 0x0005 sia CSIDL_PERSONAL. La costante magica 300 è documentata da qualche parte, o è solo MAX_PATH con qualche imbottitura arbitraria aggiunta? –

Problemi correlati