获取我的文档的路径

新手上路,请多包涵

在 Visual C++ 中,如何获取当前用户的“我的文档”文件夹的路径?

编辑:

我有这个:

 TCHAR my_documents[MAX_PATH];
HRESULT result = SHGetFolderPath(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, my_documents);

但是, resultE_INVALIDARG 的值返回。关于为什么会这样的任何想法?

原文由 Smashery 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

这取决于您需要兼容的系统的年龄。对于旧系统,有 SHGetSpecialFolderPath 。对于较新的系统,有 SHGetFolderPath 。从 Vista 开始,有 SHGetKnownFolderPath

这是一些有效的演示代码,至少在我的机器上是这样:

 #include <windows.h>
#include <iostream>
#include <shlobj.h>

#pragma comment(lib, "shell32.lib")

int main() {
    CHAR my_documents[MAX_PATH];
    HRESULT result = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, my_documents);

    if (result != S_OK)
        std::cout << "Error: " << result << "\n";
    else
        std::cout << "Path: " << my_documents << "\n";
    return 0;
}

原文由 Jerry Coffin 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 Windows 10 下将 Visual Studio 2017 与 MFC 应用程序一起使用,我使用以下代码片段和 SHGetKnownFolderPath 函数 来获取当前用户的 Documents 文件夹:

 #include <string>     // include file for C++ native strings

//  . . .  other code.

PWSTR   ppszPath;    // variable to receive the path memory block pointer.

HRESULT hr = SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &ppszPath);

std::wstring myPath;
if (SUCCEEDED(hr)) {
    myPath = ppszPath;      // make a local copy of the path
}

CoTaskMemFree(ppszPath);    // free up the path memory block

请注意,文档中有关于路径变量用法和返回路径的说明:

ppszPath [出]

类型:PWSTR*

当此方法返回时,包含指向以 null 结尾的 Unicode 字符串的指针的地址,该字符串指定已知文件夹的路径。一旦不再需要该资源,调用进程负责通过调用 CoTaskMemFree 释放该资源。返回的路径不包含尾部反斜杠。例如,返回“C:\Users”而不是“C:\Users\”。

有关 FOLDERID_ 参数的列表,请参阅 MSDN 文章 KNOWN_FOLDER_FLAG 枚举

原文由 Richard Chambers 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏