如何使用C++以跨平台方式查找用户的主目录?

Mac*_*cha 28 c++ cross-platform home-directory

如何在C++中以跨平台方式查找用户的主目录?即Linux中的/ home/user,Windows Vista上的C:\ Users\user \,Windows XP上的C:\ Documents And Settings\user \以及Mac使用的任何内容.(我认为是/用户/用户)

基本上,我正在寻找的是一种C++方式(在python中的例子)

os.path.expanduser("~")
Run Code Online (Sandbox Code Playgroud)

Mar*_*tos 27

我不认为用这个完全隐藏Windows/Unix的区别是可能的(除非Boost有一些东西).

最简便的方式必须是getenv("HOME")在Unix和连接的结果getenv("HOMEDRIVE"),并getenv("HOMEPATH")在Windows上.

  • +1这或多或少是Qt在`QDir :: homepath()`中所做的:http://doc.trolltech.com/4.6/qdir.html#homePath.也可以查看他们的来源. (12认同)

sor*_*rin 18

是可能的,找到它的最好方法是研究源代码os.path.expanduser("~"),很容易在C中复制相同的功能.

您必须添加一些#ifdef指令来涵盖不同的系统.

以下是为您提供HOME目录的规则

  • Windows:env USERPROFILE或如果失败,请连接HOMEDRIVE+HOMEPATH
  • Linux,Unix和OS X:env HOME或者如果失败,请使用getpwuid()(示例代码)

重要说明:很多人都认为HOME环境变量在Unix上总是可用,但事实并非如此,一个很好的例子就是OS X.

在OS X上,当您从GUI(而不是控制台)运行应用程序时,这将不会设置此变量,因此您需要使用getpwuid().