我该如何以跨平台的方式在C++中找到用户的主目录?例如,在Linux中为/home/user,在Windows Vista中为C:\Users\user,在Windows XP中为C:\Documents And Settings\user,在苹果电脑上是什么我不确定(我认为是/User/user)。
基本上,我正在寻找一种用C++实现的方法(以下为Python示例)
os.path.expanduser("~")
我该如何以跨平台的方式在C++中找到用户的主目录?例如,在Linux中为/home/user,在Windows Vista中为C:\Users\user,在Windows XP中为C:\Documents And Settings\user,在苹果电脑上是什么我不确定(我认为是/User/user)。
基本上,我正在寻找一种用C++实现的方法(以下为Python示例)
os.path.expanduser("~")
我认为这是不可能通过一个方法完全隐藏Windows/Unix的差异(除非,也许Boost有什么东西)。
最可移植的方式应该是在Unix上使用getenv("HOME")
,在Windows上连接getenv("HOMEDRIVE")
和getenv("HOMEPATH")
的结果。
QDir::homepath()
中所做的:http://doc.trolltech.com/4.6/qdir.html#homePath。可能也要检查他们的源代码。 - stephanQDir::homePath()
的文档链接已更新。请参见http://qt-project.org/doc/qt-5/qdir.html#homePath。 - Victor Häggqvist这是可能的,而找到它的最佳方法是研究os.path.expanduser("~")
的源代码,这很容易在C中复制相同的功能。
您将需要添加一些#ifdef
指令来覆盖不同的系统。
以下是提供HOME目录的规则:
USERPROFILE
或如果失败,则连接 HOMEDRIVE
+HOMEPATH
HOME
或如果失败,则使用getpwuid()
(示例代码)重要提示:许多人假设HOME
环境变量在Unix上始终可用,但这并不正确,一个很好的例子就是OS X。
在OS X上,当您从GUI(而不是控制台)运行应用程序时,此变量将不存在,因此您需要使用getpwuid()。
#ifdef
来实现 :D - sorin