【问题标题】:Writing to user documents folder C++写入用户文档文件夹 C++
【发布时间】:2009-08-12 20:56:29
【问题描述】:

我正在尝试将一些信息写入用户的文档文件夹(例如 C:\Documents and Settings\[userName]),但我似乎不知道如何以编程方式获取路径。有没有办法做到这一点? C++,不使用 .NET。

谢谢!

【问题讨论】:

    标签: c++ windows winapi


    【解决方案1】:

    SHGetFolderPath 和 CSIDL_PERSONAL 可用于获取用户的 Documents 文件夹。

    WCHAR path[MAX_PATH];
    HRESULT hr = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL,
                                 SHGFP_TYPE_CURRENT, path);
    

    【讨论】:

    • 文档暗示您应该使用 CSIDL_PERSONAL 而不是 CSIDL_MYDOCUMENTS。
    • CSIDL_PERSONAL 和 CSIDL_MYDOCUMENTS 是同义词。 . .但是,是的,我更喜欢 CSIDL_PERSONAL 的内涵。
    • 嗯,从我阅读的文档来看,它没有任何意义。事实上,我会说这意味着 CSIDL_MYDOCUMENTS 是更好的选择,因为它不适用于旧系统,因此不会做意想不到的事情。
    • #define CSIDL_MYDOCUMENTS CSIDL_PERSONAL // Personal 只是 My Documents 的一个愚蠢的名称,直接来自 ShlObj.h 本身。
    【解决方案2】:

    你可以这样做:

    wchar_t *pUSERPROFILE;
    size_t len;
    _wdupenv_s( &pUSERPROFILE, &len, L"USERPROFILE" );
    wstring userprofile = pUSERPROFILE;
    free (pUSERPROFILE);    
    

    _wdupenv_s MSDN

    【讨论】:

    • 你想要 _wgetenv;这是内存泄漏。很好的例子,微软的“安全”扩展实际上会适得其反。
    • 至于 _wgetenv :“通过分配缓冲区本身,_dupenv_s 提供了一个比 getenv_s 更方便的替代方案,_wgetenv_s。”
    猜你喜欢
    • 2018-02-08
    • 2016-01-27
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2016-04-17
    • 2016-02-07
    相关资源
    最近更新 更多