2010-10-13 28 views
12

Trong C++, không quá khó để có được tên đường dẫn đầy đủ vào thư mục mà shell gọi là "My Documents" trong Windows XP và Windows 7 và "Documents" trong Vista; xem Get path to My DocumentsLàm thế nào để bạn có được đường dẫn chính xác đến "Tài liệu của tôi"?

Có cách nào đơn giản để thực hiện việc này bằng Python không?

+0

Tôi không biết nhiều về cửa sổ, nhưng không phải là 'os.environ [ 'HOMEPATH'] 'thường được định nghĩa trên các hệ thống cửa sổ? –

+0

@Joe, trên hệ thống của tôi 'os.environ ['HOMEPATH']' trả về ''\\''. –

+0

@Mark - Ah, lời xin lỗi của tôi ... Nó dường như hoạt động trên vài máy XP mà tôi có quyền truy cập, và tôi mơ hồ nhớ lại nó là tiêu chuẩn ... Tôi đoán là không! –

Trả lời

12

Bạn có thể sử dụng các mô-đun ctypes để có được những "My Documents" thư mục:

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

Nguồn: http://bugs.python.org/issue1763#msg62242

+0

Tôi muốn đưa ra +1, nhưng sử dụng phiên bản ANSI có thể giới hạn trên các thư mục sử dụng các ký tự bên ngoài trang mã mặc định. –

+1

@Adrian McCarthy, cảm ơn tôi đã không nhận thấy điều đó. Tôi đã thay đổi câu trả lời của mình để sử dụng phiên bản unicode thay thế. –

+1

Tôi đoán hằng số ma thuật 0x0005 là CSIDL_PERSONAL. Là hằng số ma thuật 300 tài liệu ở đâu đó, hoặc là nó chỉ MAX_PATH với một số padding tùy ý thêm? –

Các vấn đề liên quan