2010-10-13 8 views
12

En C++ no es demasiado difícil obtener la ruta de acceso completa a la carpeta que el shell llama "Mis documentos" en Windows XP y Windows 7 y "Documentos" en Vista; vea Get path to My Documents¿Cómo se obtiene la ruta exacta a "Mis documentos"?

¿Hay una manera simple de hacer esto en Python?

+0

No sé mucho acerca de las ventanas, pero no es 'os.environ [ 'HOMEPATH'] 'generalmente se define en los sistemas de Windows? –

+0

@Joe, en mi sistema 'os.environ ['HOMEPATH']' devuelve ''\\''. –

+0

@Mark - Ah, mis disculpas ... Parecía funcionar en el par de máquinas XP a las que tenía acceso, y recordaba vagamente que era estándar ... ¡supongo que no! –

Respuesta

12

podría utilizar el módulo de ctypes para obtener el directorio "Mis documentos":

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!") 

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

+0

Daría un +1, pero el uso de la versión ANSI puede estar limitando los directorios que usan caracteres fuera de la página de códigos predeterminada. –

+1

@Adrian McCarthy, gracias, no me di cuenta. Cambié mi respuesta para usar la versión Unicode. –

+1

Supongo que la constante mágica 0x0005 es CSIDL_PERSONAL. ¿Está la magia constante 300 documentada en alguna parte, o es solo MAX_PATH con algún relleno arbitrario agregado? –

Cuestiones relacionadas