如何使用 C++ 获取 Windows 用户配置文件路径的父文件夹

Posted

技术标签:

【中文标题】如何使用 C++ 获取 Windows 用户配置文件路径的父文件夹【英文标题】:How to get the parent folder of a Windows user's profile path using C++ 【发布时间】:2012-07-12 18:23:19 【问题描述】:

我正在尝试获取 Windows 用户配置文件路径的父文件夹。但是我找不到任何“参数”来使用SHGetSpecialFolderPath 来获得这个,到目前为止我使用的是CSIDL_PROFILE

预期路径:

Win7 - "C:\Users"

Windows XP - “C:\Documents and Settings”

【问题讨论】:

仅当前用户或可能是其他用户? ex:我正在使用 CSIDL_PROFILE 来获取当前用户路径,我正在寻找类似的方式来获取当前用户配置文件路径的父文件夹。 你想要父路径。那让我失望了。此外,有关CSIDL_PROFILE 的信息也属于您的问题。我在问题中解决了这个问题。如果我有错误,请阅读并更正。 是的,很抱歉,我会在下次发布问题之前确定。 【参考方案1】:

除了向用户显示路径之外的大多数用途,它应该可以将"\\.."(或"..\\",如果它以反斜杠结尾)附加到相关路径。

【讨论】:

【参考方案2】:

使用 6.0 版的 shell 库,您可以使用 CSIDL_PROFILES(不要与 CSIDL_PROFILE 混淆),它可以满足您的需求。 该值已被删除(参见 here),您必须使用自己的解决方法。

在任何以前的版本中,您都必须实施自己的解决方法,例如寻找可能的路径分隔符,即 Windows 上的 \/,并在最后一个处终止字符串。一个简单的版本可以使用strrchr(或wcsrchr)来定位反斜杠,然后假设字符串是可写的,在该位置终止字符串。

例子:

char* path;
// Retrieve the path at this point, e.g. "C:\\Users\\username"
char* lastSlash = strrchr(path, '\\');
if(!lastSlash)
  lastSlash = strrchr(path, '/');
if(lastSlash)
  *lastSlash = 0;

或者当然是GetProfilesDirectory(这让我无法理解),您在对此答案的评论中指出了这一点。

【讨论】:

Thanks@ox0000022l,GetProfilesDirectory 也会这样做。 @JChan:好电话,为了完整起见,将其编辑到我的答案中。这可能是CSIDL_PROFILES 这么快被废弃的原因。

以上是关于如何使用 C++ 获取 Windows 用户配置文件路径的父文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 和 WinAPI 在 Windows 8 上获取登录用户名或电子邮件

使用 C++ 和 WinAPI 在 Windows 8 上获取登录用户名或电子邮件

如何使用 C++ 在 Windows 中获取硬件信息?

在 Windows 中,如何使用 C++ 或 C# 在属于另一个进程的窗口中突出显示文本?

如何使用 C++ 在 Windows 中获取应用程序数据路径?

如何在 C++ 中获取 Windows 下的内存使用情况