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

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

预期路径:

Win7 - "C:\Users"

Windows XP - “C:\Documents and Settings”

【问题讨论】:

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

标签: winapi visual-c++


【解决方案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 这么快被废弃的原因。
    猜你喜欢
    • 2016-11-10
    • 2011-07-31
    • 2013-09-30
    • 2013-08-27
    • 2011-07-27
    • 2010-11-22
    • 2010-10-14
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多