如何使用 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 库,您可以使用 该值已被删除(参见 here),您必须使用自己的解决方法。CSIDL_PROFILES
(不要与 CSIDL_PROFILE
混淆),它可以满足您的需求。
在任何以前的版本中,您都必须实施自己的解决方法,例如寻找可能的路径分隔符,即 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 上获取登录用户名或电子邮件
在 Windows 中,如何使用 C++ 或 C# 在属于另一个进程的窗口中突出显示文本?