您如何获得“我的文档”的确切路径?

Posted

技术标签:

【中文标题】您如何获得“我的文档”的确切路径?【英文标题】:How do you get the exact path to "My Documents"? 【发布时间】:2010-10-13 19:26:02 【问题描述】:

在 C++ 中,在 Windows XP 和 Windows 7 中获取 shell 调用的“我的文档”以及在 Vista 中调用“文档”的文件夹的完整路径名并不难;见Get path to My Documents

有没有简单的方法在 Python 中做到这一点?

【问题讨论】:

我对windows了解不多,但是os.environ['HOMEPATH']不是通常在windows系统上定义的吗? @Joe,在我的系统上os.environ['HOMEPATH'] 返回'\\' @Mark - 啊,我很抱歉......它似乎在我可以访问的几台 XP 机器上工作,我隐约记得它是标准的......我猜不是!跨度> +1 表示不想使用“我的文档”文件夹的硬编码路径。 令人恼火的是,Windows 没有为此包含环境变量。尝试使用 HOMEPATH 或 USERPROFILE 会烧毁你,因为不能保证其中存在所述目录,因为本地化或系统管理员已移动它。 【参考方案1】:

您可以使用 ctypes 模块来获取“我的文档”目录:

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

来源:http://bugs.python.org/issue1763#msg62242

【讨论】:

我会给 +1,但使用 ANSI 版本可能会限制使用默认代码页之外的字符的目录。 @Adrian McCarthy,谢谢,我没有注意到。我已将答案更改为使用 unicode 版本。 我认为魔法常数 0x0005 是 CSIDL_PERSONAL。魔术常数 300 是在某处记录的,还是只是 MAX_PATH 添加了一些任意填充? FWIW,如果成功,SHGetSpecialFolderPathW() 调用返回 True,否则返回 False,因此可以检查以确定是否在 buf.value 中放置了任何有用的东西。 仅供参考:在回答类似问题时,我发现您可以通过简单地从 ctypes 模块中导入 wintypes 来避免对 MAX_PATH 进行硬编码:from ctypes import wintypes。现在无需将 MAX_PATH 硬编码为 260,您可以像这样访问它:wintypes.MAX_PATH

以上是关于您如何获得“我的文档”的确切路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何选择“我的文档”路径来保存文件

如何以编程方式获取 apk 文件名和路径?

excel vba 不遵循保存路径并保存在我的文档中

Inno Setup 编译器如何使安装程序在安装时在我的文档生成一个文件

Firefox 火狐文件下载的默认路径是啥?

如何获得我的 TextView 的像素的确切位置?