2010-10-13 15 views
12

W C++ nie jest trudno uzyskać pełną nazwę ścieżki do folderu, który powłoka nazywa "Moje dokumenty" w Windows XP i Windows 7 oraz "Dokumenty" w Vista; zobacz Get path to My DocumentsJak uzyskać dokładną ścieżkę do "Moich dokumentów"?

Czy istnieje prosty sposób to zrobić w Pythonie?

+0

nie wiem zbyt wiele o oknach, ale nie jest 'os.environ [ "HOMEPATH"] "zwykle definiowane w systemach Windows? –

+0

@Joe, na moim systemie 'os.environ ['HOMEPATH']' zwraca ''\\''. –

+0

@Mark - Ach, moje przeprosiny ... Wyglądało na to, że działam na kilku maszynach XP, do których mam dostęp, i niewyraźnie przypomniałem sobie, że to standard ... chyba nie! –

Odpowiedz

12

Można użyć modułu ctypes uzyskać „Moje dokumenty” katalog:

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

Źródło: http://bugs.python.org/issue1763#msg62242

+0

Podałbym +1, ale używanie wersji ANSI może ograniczać katalogi, które używają znaków spoza domyślnej strony kodowej. –

+1

@Adrian McCarthy, dziękuję, że tego nie zauważyłem. Zmieniłem swoją odpowiedź, aby zamiast tego używać wersji unicode. –

+1

Zakładam, że magiczna stała 0x0005 to CSIDL_PERSONAL. Czy magia jest stała 300 gdzieś udokumentowana, czy jest to tylko MAX_PATH z dodanym dowolnym dopełnieniem? –

Powiązane problemy